13. Quelques recettes pour faire durer le plaisir
Extraire seulement les caractères de 5 à 7
Extraire les caractères à partir de 5
Savoir si une condition est vraie ou fausse?
Est-ce que le contenu des valeurs correspond à “2019-01-01”
Connaître la longueur des valeurs d’une colonne
Compter le nombre de mots dans des cellules (séparés par des espaces)
- value.split(" ").length() ou value.split(//).length()
Calcul d’un pourcentage arrondi (ex d’un résultat sur 10)
Transformer un format date en format texte plus lisible
- value.toString(“dd MMMM yyyy”)
La création et manipulation de listes (array) - Diviser le contenu de cellules
Diviser le contenu de cellules en fonction d’un séparateur pour ne conserver que le premier élément
Diviser le contenu d’une cellule pour le réordonner
value.split(“,”).reverse().join(“,”)
value.split(“,”).sort().join(“,”)
Diviser après les 3 premiers caractères et conserver le premier élément
- value.splitByLengths(3)[0]
Diviser selon le type de caractères et retenir le deuxième élément
- value.splitByCharType()[1]
Diviser le contenu d’une cellule sur un terme x et conserver le contenu précédent
Inverser le contenu d’une cellule
Diviser le contenu d’une cellule et inverser l’ordre de présentation en ajoutant une virgule entre les deux
- value.split(’ ‘)[1] + “,” + " " + value.split(’ ’)[0]
OU
- value.match(/(.),(.)/).reverse().join(" ")
Ajouter un zéro pour avoir un nombre de caractères précis
Ajouter un zéro devant le contenu si donne une chaine de 0 à 2 caractères
- “0”[0,2-length(value)] + value
Appliquer des conditions
Fonction if - même chose que dans excel
- if(test, si test est vrai, si test est vrai)
Si la cellule contient x, écrire x, sinon y
if(value.contains(“x”), “x”, “y”)
if(value.contains(“1”), value, null)
Comparer deux colonnes
Identifier si le contenu des cellules d’une colonne est pareil à une autre
- value == cells[‘autre-colonne’].value
Est-ce que le premier caractère de la colonne x est le même que la colonne y
- cells[“colonne1”].value[0] == cells[“colonne2”].value[0]
Comparer le contenu de deux colonnes et modifier les valeurs selon le résultat de la condition
- if(cells[“colonne1”].value == cells[“colonne2”].value, “Pareil”, “Pas pareil”)
Vérifier le format d’une colonne
Faire des calculs simples (valeurs numériques)
Somme d’une colonne plus une autre
- value + cells[‘Jour du mois’].value
Arrondir le contenu
Reprendre et concaténer le contenu d’une autre colonne
Créer une nouvelle colonne en fusionnant le contenu de deux autres et ajouter du texte
- cells[‘nom’].value + cells[‘nom’].value + “Bonjour!”
Créer une nouvelle colonne avec les trois premiers caractères seulement
- cells[‘Symptome’].value[0,3]
Transformer le contenu d’une colonne en concaténant le contenu d’une autre
- value + ’ ’ + cells[‘street-type’].value
Remplacer des caractères
Remplacer tout le contenu d’une colonne (ici, vider la colonne)
Remplacer une lettre par une autre
- value.replaceChars(“o”, “a”)
Faire plusieurs remplacements d’un coup
- value.replace(“1”, “un”).replace(“2”, “deux”).replace(“3”, “trois”)
Identifier des cellules qui commencent par… (résultat booléen)
- value.startsWith(“Berri”)
Supprimer un caractère de début ou fin de valeur:
Supprime “S” du début de la cellule
- value.replace(/^S/,"") [regex ^ indique le début d’une cellule]
Supprime “.” à la fin de la cellule
- value.replace(/.$/,"") [regex $ indique la fin d’une cellule]
Modifier/supprimer la ponctuation
Travailler avec un format date
Extraire seulement une partie d’une date
value.toDate().datePart(“year”)
diff(now(),value,‘weeks’)
LS0tDQp0aXRsZTogIk9wZW5SZWZpbmUiDQphdXRob3I6ICJDYXJvbGluZSBQYXRlbmF1ZGU8L2JyPkJpYmxpb3Row6hxdWUgZGVzIGxldHRyZXMgZXQgc2NpZW5jZXMgaHVtYWluZXMsIFVuaXZlcnNpdMOpIGRlIE1vbnRyw6lhbDwvYnI+Y2Fyb2xpbmUucGF0ZW5hdWRlQHVtb250cmVhbC5jYSINCmRhdGU6ICJgciBTeXMuRGF0ZSgpYCINCm91dHB1dDoNCiAgcm1kZm9ybWF0czo6cm9ib2Jvb2s6DQogICAgc2VsZl9jb250YWluZWQ6IHRydWUNCiAgICBoaWdobGlnaHQ6IGthdGUNCiAgICB0aHVtYm5haWxzOiBmYWxzZQ0KICAgIGxpZ2h0Ym94OiB0cnVlDQogICAgZ2FsbGVyeTogdHJ1ZQ0KICAgIHRvY19kZXB0aDogMg0KICAgIGNvZGVfZG93bmxvYWQ6IHRydWUNCiAgICBtYXRoamF4OiBudWxsDQogICAgZGZfcHJpbnQ6IHBhZ2VkDQotLS0NCg0KDQpgYGB7ciBzZXR1cCwgaW5jbHVkZT1GQUxTRX0NCmxpYnJhcnkoa25pdHIpDQpsaWJyYXJ5KHJtZGZvcm1hdHMpDQoNCiMjIEdsb2JhbCBvcHRpb25zDQpvcHRpb25zKG1heC5wcmludD0iNzUiKQ0Kb3B0c19jaHVuayRzZXQoZWNobz1GQUxTRSwNCgkgICAgICAgICAgICAgY2FjaGU9VFJVRSwNCiAgICAgICAgICAgICAgIHByb21wdD1GQUxTRSwNCiAgICAgICAgICAgICAgIHRpZHk9VFJVRSwNCiAgICAgICAgICAgICAgIGNvbW1lbnQ9TkEsDQogICAgICAgICAgICAgICBtZXNzYWdlPUZBTFNFLA0KICAgICAgICAgICAgICAgd2FybmluZz1GQUxTRSkNCm9wdHNfa25pdCRzZXQod2lkdGg9NzUpDQpgYGANCg0KDQoNCiFbXShpbWFnZXMvT1ItbG9nby5qcGcpIA0KDQo8L2JyPg0KDQoqKioNCg0KDQojIE9iamVjdGlmcw0KDQo8ZGl2IGNsYXNzID0gInJpZ2h0Ij4NCjxpbWcgc3JjPSJpbWFnZXMvT1IxNi5qcGciIHdpZHRoPSIyNTBweCIgLz4NCjwvZGl2Pg0KDQotIENvbXByZW5kcmUgbGUgZm9uY3Rpb25uZW1lbnQgZHUgbG9naWNpZWwuDQotIEltcG9ydGVyIGV0IGV4cGxvcmVyIHVuIGpldSBkZSBkb25uw6llcy4gDQotIE1hbmlwdWxlciBldCB0cmFuc2Zvcm1lciBkZXMgZG9ubsOpZXMuDQotIFMnaW5pdGllciDDoCBsJ3VzYWdlIGR1IGxhbmdhZ2UgR1JFTCBldCBhdXggZXhwcmVzc2lvbnMgcsOpZ3VsacOocmVzLg0KPC9icj4NCjwvYnI+DQo8L2JyPg0KPC9icj4NCjwvYnI+DQoNCioqKg0KDQoNCiMgMS4gUHLDqWxpbWluYWlyZXMNCiMjIERlcyBkb25uw6llcyBiaWVuIG9yZG9ubsOpZXMgY29tbWVuY2VudCBwYXIgc29pLW3Dqm1lIQ0KDQoNCi0gTGUgbmV0dG95YWdlIGRlIGZpY2hpZXJzIGRlIGRvbm7DqWVzIGVzdCB1bmUgdMOiY2hlIHNvdXZlbnQgbG9uZ3VlIGV0IGVubnV5ZXVzZSBtYWlzIGluY29udG91cm5hYmxlIGF2YW50IHRvdXRlIGFuYWx5c2Ugb3UgZGlmZnVzaW9uIGRlIGRvbm7DqWVzLg0KDQotIEwnYW1wbGV1ciBkZSBjZXR0ZSB0w6JjaGUgZMOpcGVuZHJhIGRlIGwnw6l0YXQgZGVzIGRvbm7DqWVzIGV0IGR1IHR5cGUgZGUgbG9naWNpZWwgcXVpIHNlcmEgZW5zdWl0ZSB1dGlsaXPDqSDDoCBkZXMgZmlucyBkJ2FuYWx5c2Ugb3UgZGUgdmlzdWFsaXNhdGlvbiAoUiwgU1BTUywgU3RhdGEsIFRhYmxlYXUsIEFyY0dJUy4uLikNCg0KPC9icj4NCg0KIyMjIyBQcm9ibMOobWVzIGNvdXJhbnRzIHJlbGF0aWZzIMOgIGxhIGZvcm1lIGV0L291IGF1IGNvbnRlbnUgZCd1biBqZXUgZGUgZG9ubsOpZXM6DQoNCi0gUHJvYmzDqG1lcyBkJ2VudMOqdGVzIGV0IGRlIG5vbXMgZGUgdmFyaWFibGVzLg0KLSBDZWxsdWxlcyBmdXNpb25uw6llcywgcXVpIGNvbnRpZW5uZW50IGRpZmbDqXJlbnRlcyBpbmZvcm1hdGlvbnMuDQotIFZhcmlhYmxlcyBxdWkgbmUgc29udCBwYXMgY2xhaXJlbWVudCBkw6lmaW5pZXMgw6AgbGEgdmVydGljYWxlLg0KLSBDb250ZW51IHRleHR1ZWwgbm9uIHN0cnVjdHVyw6kuDQotIFByb2Jsw6htZXMgZGUgZm9ybWF0cywgZGUgInBldGl0cyBjYXJhY3TDqHJlcyIgLT4gc8OpcGFyYXRldXJzL2TDqWxpbWl0ZXVycyBkZSBjb250ZW51IGV0IGRlIGNvbG9ubmVzLCBndWlsbGVtZXRzLCBlbmNvZGFnZSAoJycgIHx8IHwgIiIgLCAuIDsgKQ0KLSBQcsOpc2VuY2UgZGUgY2VsbHVsZXMgdmlkZXMsIGVzcGFjZXMuLi4NCg0KW0EgY2FzZSBzdHVkeSBpbiBtZXNzeSBkYXRhIGFuYWx5c2lzOiB0aGUgQXVzdHJhbGlhbiBzYW1lLXNleCBtYXJyaWFnZSBzdXJ2ZXldKGh0dHBzOi8vYmxvZy5yZXZvbHV0aW9uYW5hbHl0aWNzLmNvbS8yMDE3LzEyL3NleC1tYXJyaWFnZS1zdXJ2ZXkuaHRtbCkNCg0KPGNlbnRlcj4NCg0KIVtdKGltYWdlcy9PUjkuanBnKXt3aWR0aD02MCV9ICANCg0KPC9jZW50ZXI+DQoNCjwvYnI+DQoNCioqKg0KDQoNCkF2YW50IGQndXRpbGlzZXIgc2VzIGRvbm7DqWVzIGRhbnMgbGUgbG9naWNpZWwgZGUgc29uIGNob2l4LCBsZSBuZXR0b3lhZ2UgZGUgc2VzIGRvbm7DqWVzIHBldXQgZG9uYyBpbmNsdXJlIGRlIG5vbWJyZXVzZXMgdMOiY2hlcyBjb21tZToNCg0KPGRpdiBjbGFzcyA9ICJyaWdodCI+DQo8aW1nIHNyYz0iaW1hZ2VzL2JvdHRsZS5wbmciIHdpZHRoPSIxNzVweCIgLz4NCjwvZGl2Pg0KLSBNb2RpZmllciBsJ2VuY29kYWdlLg0KLSBTdXBwcmltZXIgbGVzIGRvdWJsb25zLg0KLSBEaXZpc2VyIGxlcyBjZWxsdWxlcyBjb21wb3PDqWVzIGRlIHZhbGV1cnMgbXVsdGlwbGVzLiAgIA0KLSBSZWNvZGVyIGxlcyB2YWxldXJzIG1hbnF1YW50ZXMuDQotIFJlcMOpcmVyIGxlcyBlcnJldXJzIGRlIHNhaXNpZSwgbGVzIHZhbGV1cnMgYWJlcnJhbnRlcy4uLg0KLSBGdXNpb25uZXIgZGVzIGZpY2hpZXJzLg0KLSBGdXNpb25uZXIgZGVzIGNvbG9ubmVzLg0KLSBBZ3LDqWdlciBkZXMgdmFsZXVycyBkZSB2YXJpYWJsZXMuDQotIENyw6llciBkZXMgdmFyaWFibGVzLg0KLSBDaGFuZ2VyIGxlIGZvcm1hdCBkZXMgdmFyaWFibGVzLg0KLSBDaGFuZ2VyIGxlIGZvcm1hdCBkdSBmaWNoaWVyLg0KLSBUcmFuc2Zvcm1lciBsZXMgY29sb25uZXMgZW4gcmFuZ8OpZXMgKGZvcm1hdCAid2lkZSIgZW4gImxvbmciKS4NCg0KPC9icj4NCg0KKioqDQoNCg0KIyAyLiBQb3VycXVvaSBPcGVuUmVmaW5lPw0KDQotIFBsdXNpZXVycyBsYW5nYWdlcyBkZSBwcm9ncmFtbWF0aW9uIGV0IG91dGlscyBkJ2FuYWx5c2Ugb3UgZGUgZ2VzdGlvbiBkZSBkb25uw6llcyBwZXV2ZW50IMOqdHJlIHV0aWxpc8OpcywgbWFpcyBPcGVuUmVmaW5lIGEgw6l0w6kgY3LDqcOpIHNww6ljaWZpcXVlbWVudCBwb3VyIGZhaXJlIGxlIG3DqW5hZ2UhDQoNCi0gUGx1cyBmYWNpbGUgcXVlIFIgZXQgcGx1cyBlZmZpY2FjZSBxdSdFeGNlbC4NCg0KLSBQZXJtZXQgZGUgZmFjaWxlbWVudCBpZGVudGlmaWVyIGV0IGRlIGNvcnJpZ2VyIGVuIGxvdCBkZXMgZG9ubsOpZXMgaW5jb21wbMOodGVzLCBtYW5xdWFudGVzLCBlcnJvbsOpZXMsIGluY29ow6lyZW50ZXMsIG5vbiBwZXJ0aW5lbnRlcywgbWFsIGZvcm1hdMOpZXMsIHF1J2VsbGVzIHNvaWVudCBudW3DqXJpcXVlcyBvdSB0ZXh0dWVsbGVzID0+IHNhdXZlIHRlbXBzIGV0IMOpbmVyZ2llLg0KDQoNCjxjZW50ZXI+ICAgDQoNCjxpbWcgc3JjPSJpbWFnZXMvMTkxOC1BZC04NjAtODYweDU3My5qcGciIHdpZHRoPSI2MCUiLz4NCg0KPC9jZW50ZXI+ICAgDQoNCg0KPC9icj4NCg0KIyMjIEZvbmN0aW9ucyBzcMOpY2lhbGlzw6llcyBwb3VyOg0KDQotICpFeHBsb3Jlciogc2VzIGRvbm7DqWVzIHNvdXMgdG91cyBzZXMgYW5nbGVzIChncsOiY2Ugw6AgZGVzIGZpbHRyZXMsIHRyaXMsIGZhY2V0dGVzLCByZWdyb3VwZW1lbnRzKS4gICANCi0gKk5ldHRveWVyKiA6IHJlcMOpcmVyIGRlcyBlcnJldXJzLCBtb2RpZmllciBsZSBjb250ZW51IGRlcyBjZWxsdWxlcy4uLg0KLSAqVHJhbmZvcm1lciogOiBjaGFuZ2VyIGZvcm1hdHMgZGUgc2VzIHZhcmlhYmxlcywgY3LDqWVyIGRlIG5vdXZlbGxlcyB2YXJpYWJsZXMgc3VyIGxhIGJhc2UgZGVzIGNvbG9ubmVzIHByw6lzZW50ZXMuLi4NCi0gKkVucmljaGlyKiA6IGZ1c2lvbm5lciBkZXMgZmljaGllcnMsIGltcG9ydGVyIGRlcyBkb25uw6llcyBlbiBsaWduZSAoQVBJLCBVUkxzKSwgcsOpY29uY2lsaWF0aW9uIChXaWtpZGF0YSBldCBbYXV0cmVzIHNvdXJjZXMgZXh0ZXJuZXNdKGh0dHBzOi8vZ2l0aHViLmNvbS9PcGVuUmVmaW5lL09wZW5SZWZpbmUvd2lraS9SZWNvbmNpbGFibGUtRGF0YS1Tb3VyY2VzKSkuLi4NCi0gKkF1dG9tYXRpc2VyKiAocsOpdXRpbGlzZXIgc29uIGhpc3RvcmlxdWUgZGUgbWFuaXB1bGF0aW9ucykNCg0KPC9icj4NCg0KPGRpdiBjbGFzcyA9ICJub3RlIj4NCg0KKirDgCBub3RlcioqIA0KDQpPcGVuUmVmaW5lIG4nZXN0IHBhcyB1biBvdXRpbCBkJ2FuYWx5c2Ugb3UgZGUgdmlzdWFsaXNhdGlvbiBldCBuZSBwZXJtZXQgcGFzIGRlIGNyw6llciB1biBqZXUgZGUgZG9ubsOpZXMgw6AgcGFydGlyIGRlIHrDqXJvLiBDZSBuJ2VzdCBwYXMgdW4gb3V0aWwgZGUgcmVtcGxhY2VtZW50IG1haXMgY29tcGzDqW1lbnRhaXJlLg0KDQo8L2Rpdj4NCg0KDQo8L2JyPg0KDQoqKioNCg0KDQojIyAyLjEuIEV4ZW1wbGVzIGQndXRpbGlzYXRpb24NCg0KSGFybW9uaXNlciwgc3RhbmRhcmRpc2VyLCB1bmlmb3JtaXNlci4uLg0KDQo8Y2VudGVyPiAgDQoNCiFbXShpbWFnZXMvT1I4LmpwZykgICANCg0KPC9jZW50ZXI+ICANCg0KPC9icj4NCg0KKioqDQoNCg0KIyMgMi4yLiBQb3VyIGF2b2lyIGRlIGJlbGxlcyBkb25uw6llcyAqdGlkeSoNCg0KUGVybWV0IGQnYXBwbGlxdWVyIGxlcyBwcmluY2lwZXMgZHUgW1RpZHlkYXRhXShodHRwczovL3I0ZHMuaGFkLmNvLm56L3RpZHktZGF0YS5odG1sKSANCg0KPiDigJxUaWR5IGRhdGFzZXRzIGFyZSBhbGwgYWxpa2UsIGJ1dCBldmVyeSBtZXNzeSBkYXRhc2V0IGlzIG1lc3N5IGluIGl0cyBvd24gd2F5LuKAnSDigJPigJMgSGFkbGV5IFdpY2toYW0NCg0KPC9icj4NCg0KKipUcm9pcyBwcmluY2lwZXMgZGUgYmFzZToqKg0KDQoxLiBDaGFxdWUgY29sb25uZSBlc3QgdW5lICoqdmFyaWFibGUqKi4NCjIuIENoYXF1ZSBsaWduZSBlc3QgdW5lICoqb2JzZXJ2YXRpb24qKi4NCjMuIENoYXF1ZSBjZWxsdWxlIMOgICoqdW5lIHNldWxlIHZhbGV1cioqLg0KDQo8Y2VudGVyPiAgDQoNCiFbXShpbWFnZXMvT1IxMC5qcGcpIA0KDQo8L2NlbnRlcj4gIA0KDQo8L2JyPg0KDQoqKioNCg0KDQojIyAyLjMuICBQcmluY2lwYWxlcyBjYXJhY3TDqXJpc3RpcXVlcw0KDQotIExvZ2ljaWVsIGdyYXR1aXQgZXQgb3V2ZXJ0IHV0aWxpc8OpIHBhciB1bmUgbGFyZ2UgY29tbXVuYXV0w6kuDQoNCi0gQ3LDqcOpIGVuIDIwMTAgKCpGcmVlYmFzZSBHcmlkd29ya3MqKSwgcmFjaGV0w6kgcGFyIEdvb2dsZSBlbiAyMDEwICgqR29vZ2xlIFJlZmluZSopLCBwdWlzIG91dmVydHVyZSBkdSBjb2RlIGVuIDIwMTIgZXQgcmVwcmlzIHBhciBjb21tdW5hdXTDqSBxdWkgbGUgZMOpcGxhY2Ugc3VyIEdpdGh1YiBldCBkZXZpZW50ICpPcGVuUmVmaW5lKi4NCg0KLSBNdWx0aXBsYXRlZm9ybWVzOiBXaW5kb3dzLCBNYWMsIExpbnV4Lg0KDQotIEludGVyZmFjZSBzZW1ibGFibGUgw6AgdW4gdGFibGV1ciBjb21tZSBFeGNlbCwgbWFpcyBkb250IGxlIGZvbmN0aW9ubmVtZW50IHMnYXBwYXJlbnRlIHBsdXMgw6AgdW5lIGJhc2UgZGUgZG9ubsOpZXMgKHBhciBleGVtcGxlIGxlcyB0cmFpdGVtZW50cyBzb250IHPDqXBhcsOpcyBkZXMgZG9ubsOpZXMsIGllIGxlcyBmb3JtdWxlcyBuZSBzb250IHBhcyBlbnJlZ2lzdHLDqWVzIGRhbnMgbGVzIGNlbGx1bGVzIG1haXMgZGFucyB1biBzY3JpcHQpLg0KDQotIEFzc29jaWUgbGEgZmFjaWxpdMOpIGQndXNhZ2UgZCd1biBsb2dpY2llbCBjb21tZSBFeGNlbCDDoCBsYSBwdWlzc2FuY2UgZCdvdXRpbHMgZGUgcHJvZ3JhbW1hdGlvbiBldCBkJ2FsZ29yaXRobWVzLg0KDQotIFVzYWdlIGRlIGwnKippbnRlcmZhY2UgZ3JhcGhpcXVlKiogZXQvb3UgKipzY3JpcHRzIEdSRUwqKiAoKkdvb2dsZSBSZWZpbmUgRXhwcmVzc2lvbiBMYW5ndWFnZSopOiBwcm9wb3NlIHVuIGVuc2VtYmxlIGRlIGZvbmN0aW9ucyBhdXRvbWF0aXPDqWVzIGRvbmMgbmUgbsOpY2Vzc2l0ZSDDoCBsYSBiYXNlIGF1Y3VuZSBjb21ww6l0ZW5jZSBlbiBwcm9ncmFtbWF0aW9uIG91IGFuYWx5c2UsIG1haXMgbCd1c2FnZSBkdSBsYW5nYWdlIHBlcm1ldCBkJ2FsbGVyIGJlYXVjb3VwIHBsdXMgbG9pbi4NCg0KLSBQYXJ0aWN1bGnDqHJlbWVudCBwdWlzc2FudCBwb3VyIGxlIG5ldHRveWFnZSBkZSB0YWJsZSBkZSBkb25uw6llcyBhdmVjIGR1IGNvbnRlbnUgdGV4dHVlbC4NCg0KLSAqKlJlcHJvZHVjdGliaWxpdMOpKiohIFBlcm1ldCBkZSBnYXJkZXIgdW4gaGlzdG9yaXF1ZSBkZSB0b3V0ZXMgbGVzIG1hbmlwdWxhdGlvbnMgZWZmZWN0dcOpZXMgc3VyIHNlcyBkb25uw6llcyBhZmluIGRlIGxlcyBwYXJ0YWdlciwgZGUgbGVzIHLDqXV0aWxpc2VyIHN1ciBkJ2F1dHJlcyBkb25uw6llcy4uLg0KDQo8L2JyPg0KDQoNCioqKg0KDQoNCiMgMy4gSW5zdGFsbGF0aW9uIGV0IGZvbmN0aW9ubmVtZW50IGfDqW7DqXJhbA0KDQotIFtUw6lsw6ljaGFyZ2VyIGV0IGTDqXppcHBlcl0oaHR0cHM6Ly9vcGVucmVmaW5lLm9yZy9kb3dubG9hZC5odG1sKSBsZSBsb2dpY2llbCBkYW5zIHVuIGRvc3NpZXIgZGUgc29uIGNob2l4Lg0KDQotIENyw6nDqSBlbiBsYW5nYWdlIEphdmEgW2RvbmMgbsOpY2Vzc2l0ZSBsJ2luc3RhbGxhdGlvbiBkZSBKYXZhICg2NCBiaXRzIGRlIHByw6lmw6lyZW5jZSldKGh0dHBzOi8vd3d3LmphdmEuY29tL2VuL2Rvd25sb2FkLykuDQoNCi0gTmF2aWdhdGV1cnMgw6AgcHJpdmlsw6lnaWVyOiBDaHJvbWUsIE9wZXJhLCBFZGdlLiBGaXJlZm94IHBldXQgcG9zZXIgcHJvYmzDqG1lIChuZSBmb25jdGlvbm5lIHBhcyBkYW5zIElFKS4gIA0KDQotIExlIGZvbmN0aW9ubmVtZW50IGQnT3BlblJlZmluZSBwZXV0IMOqdHJlIHVuIHBldSBkw6lyb3V0YW50IGF1IGTDqXBhcnQgY2FyIGlsIG4neSBhIHBhcyBkJ2luc3RhbGxhdGlvbiBlbiBib25uZSBldCBkdWUgZm9ybWUgY29tbWUgcG91ciB1biBsb2dpY2llbCByw6lndWxpZXIuDQoNCi0gUG91ciBkw6ltYXJyZXIgbGUgbG9naWNpZWwsIGNsaXF1ZXIgc3VyIGxlIGZpY2hpZXIgYGAgYG9wZW5yZWZpbmUuZXhlYCBgYCBvdSBgcmVmaW5lLmJhdGAuIElsIGVzdCB1dGlsZSBkZSBmYWlyZSB1biBjbGljLWRyb2l0IHN1ciBsZSBmaWNoaWVyIC5leGUgcG91ciBsJ8OpcGluZ2xlciBkYW5zIHNhIGJhcnJlIGRlIHTDomNoZXMgKHN1ciBNYWMsIGTDqXBsYWNlciBsJ2ljw7RuZSBPcGVuUmVmaW5lIGRhbnMgbGUgZG9zc2llciBkJ2FwcGxpY2F0aW9ucyBldCBkb3VibGUgY2xpcXVlciBzdXIgY2VsbGUtY2kpLg0KDQotIFVuZSBmZW7DqnRyZSBkZSBjb21tYW5kZSBub2lyZSBzJ291dnJpcmEgZXQgbGFuY2VyYSBsJ291dmVydHVyZSBkJ3VuIG9uZ2xldCBkYW5zIGxlIG5hdmlnYXRldXIgd2ViLiAgDQoNCi0gTGEgZmVuw6p0cmUgZGUgY29tbWFuZGVzIHBldXQgZW5zdWl0ZSDDqnRyZSBpZ25vcsOpZSBtYWlzIE5FIFBBUyBMQSBGRVJNRVIhIEVsbGUgbmUgc2VydmlyYSBxdSfDoCBmZXJtZXIgbGEgc2Vzc2lvbiBkZSB0cmF2YWlsLiAgDQoNCi0gU2kgbGUgbmF2aWdhdGV1ciBuZSBzJ291dnJlIHBhcyBhdXRvbWF0aXF1ZW1lbnQsIHNhaXNpciBsJ2FkcmVzc2UgaHR0cDovLzEyNy4wLjAuMTozMzMzLyBvdSBodHRwOi8vbG9jYWxob3N0OjMzMzMgZGFucyB1biBvbmdsZXQuIA0KDQo8Y2VudGVyPiAgDQoNCiFbXShpbWFnZXMvT1IxNy5qcGcpe3dpZHRoPTgwJX0NCg0KPC9jZW50ZXI+ICANCg0KPC9icj4NCg0KKioqDQoNCg0KIyMgMy4xLiBUcmF2YWlsIGxvY2FsDQoNCi0gUmVwb3NlIGRvbmMgc3VyIGRldXggY29tcG9zYW50ZXM6IHVuICoqc2VydmV1ciB3ZWIgbG9jYWwqKiBldCB1biAqKm9uZ2xldCBkZSBuYXZpZ2F0ZXVyIHdlYioqIHBvaW50YW50IHZlcnMgbCdhZHJlc3NlIGR1IHNlcnZldXIgc3VyIHNvbiBwb3N0ZS4NCg0KLSBMZSB0cmF2YWlsIHNlIGZhaXQgZGFucyB1biBvbmdsZXQgZGUgbmF2aWdhdGV1ciBxdWkgZXN0IHVuZSBzaW1wbGUgaW50ZXJmYWNlIGdyYXBoaXF1ZSBwb3VyIGludGVyYWdpciBhdmVjIGNlIHNlcnZldXIgbG9jYWwsIG1haXMgKipsZXMgZG9ubsOpZXMgbmUgc29udCBwYXMgc3VyIGxlICJudWFnZSIqKi4NCg0KLSBUcmF2YWlsIGxvY2FsIGRvbmMgcGFzIGQnZW52aXJvbm5lbWVudCBjb2xsYWJvcmF0aWYuIA0KDQotIExlcyBmaWNoaWVycyBwcm9ncmFtbWVzIHNlIHRyb3V2ZXJvbnQgZGFucyBsZSBkb3NzaWVyIGQnaW5zdGFsbGF0aW9uIGV0IGxlcyBmaWNoaWVycyBkZSBwcm9qZXRzIGRhbnMgbGUgKndvcmtzcGFjZSBkaXJlY3RvcnkqLg0KDQotIE9wZW5SZWZpbmUgbmUgbW9kaWZpZSBwYXMgbGUgZmljaGllciBvcmlnaW5hbCwgaWwgdHJhdmFpbGxlIMOgIHBhcnRpciBkJ3VuZSAqKmNvcGllIGVuIG3DqW1vaXJlIHN0b2Nrw6llIGVuIGFyY2hpdmVzKiogZGFucyBsZSByw6lwZXJ0b2lyZSBkZSB0cmF2YWlsLg0KDQotIExlIHByb2pldCBlc3QgZW5yZWdpc3Ryw6kgZW4gZm9ybWF0IE9wZW5SZWZpbmUgYXV0b21hdGlxdWVtZW50IGRhbnMgbGUgZG9zc2llciBkZSB0cmF2YWlsIMOgIHRvdXRlcyBsZXMgNSBtaW51dGVzIChbcGV1dCDDqnRyZSBtb2RpZmnDqV0oaHR0cHM6Ly9kb2NzLm9wZW5yZWZpbmUub3JnL21hbnVhbC9ydW5uaW5nI2p2bS1wcmVmZXJlbmNlcykpLg0KDQotIExlIGZpY2hpZXIgZGUgZG9ubsOpZXMgdW5lIGZvaXMgbmV0dG95w6kgcG91cnJhIMOqdHJlIGV4cG9ydMOpIGVuIGRpZmbDqXJlbnRzIGZvcm1hdHMgZXQgbCdoaXN0b3JpcXVlL3N5bnRheGUgcG91cnJhIMOqdHJlIGV4dHJhaXQgZW4gZm9ybWF0IEpTT04gZXQgZW5yZWdpc3Ryw6kgZGFucyB1biBmaWNoaWVyIC50eHQuDQoNCi0gUG91ciBmZXJtZXIgbGEgc2Vzc2lvbiBkZSB0cmF2YWlsIGNvcnJlY3RlbWVudCwgZmFpcmUgYEN0cmwgKyBjYCBkYW5zIGZlbsOqdHJlIGRlIGNvbW1hbmRlIChwZXV0IMOqdHJlIG7DqWNlc3NhaXJlIGRlIGxlIGZhaXJlIHBsdXMgZCd1bmUgZm9pcykgPSBlbnJlZ2lzdHJlIGxlIHByb2pldCBldCBmZXJtZSBsZSBzZXJ2ZXVyLg0KDQo8L2JyPg0KDQo8ZGl2IGNsYXNzID0gIm5vdGUiPg0KKirDgCBub3RlcioqICANCi0gUGVybWV0IGRlIHRyYXZhaWxsZXIgc3VyIGRlIGdyb3MgZmljaGllcnMgbWFpcyBsYSB0YWlsbGUgcG9zc2libGUgZXN0IHRvdXQgZGUgbcOqbWUgbGltaXTDqWUsIGxhIHBlcmZvcm1hbmNlIHBldXQgZGV2ZW5pciBwcm9ibMOpbWF0aXF1ZSDDoCBwbHVzaWV1cnMgY2VudGFpbmVzIGRlIG1pbGxpZXJzIGRlIGxpZ25lcyAodG91dCBkw6lwZW5kYW50IGR1IG5vbWJyZSBkZSBjb2xvbm5lcykgZG9uYyBwYXMgdnJhaW1lbnQgZMOpdmVsb3Bww6kgcG91ciBmYWlyZSBkdSBiaWcgZGF0YS4NCi0gVHJhdmFpbGxlIGF2ZWMgMUdvIGRlIG3DqW1vaXJlIHBhciBkw6lmYXV0LiDDgCBwbHVzIGRlIDEwMCAwMDAgbGlnbmVzLCBpbCBwZXV0IMOqdHJlIHByw6lmw6lyYWJsZSBkJ1thdWdtZW50ZXIgbGEgbcOpbW9pcmVdKGh0dHBzOi8vZG9jcy5vcGVucmVmaW5lLm9yZy9tYW51YWwvaW5zdGFsbGluZyNpbmNyZWFzaW5nLW1lbW9yeS1hbGxvY2F0aW9uKSBkZSB0cmF2YWlsOiAgDQogIC0gT3V2cmlyIGxlIGZpY2hpZXIgcmVmaW5lLmluaSBkYW5zIG5vdGVwYWQgZXQgbW9kaWZpZXIgbGEgbGlnbmUgUkVGSU5FX01FTU9SWSA9IHBhcmFtZXRyZS4gIA0KICAtIFBhciBsYSBzdWl0ZSBsYW5jZXIgT1IgYXZlYyBsZSBmaWNoaWVyICpyZWZpbmUuYmF0KiBldCBub24gKm9wZW5yZWZpbmUuZXhlICouICAgDQoNCjwvZGl2Pg0KPC9icj4NCg0KKioqDQoNCg0KIyMgMy4yLiDDiWNyYW4gZCdhY2N1ZWlsDQoNCi0gw4AgcGFydGlyIGR1IG1lbnUgZGUgZ2F1Y2hlLCBpbCBlc3QgcG9zc2libGUgZGUgYENyw6llciB1biBwcm9qZXRgLCBgT3V2cmlyIHVuIHByb2pldGAgKGhpc3RvcmlxdWUgZGVzIHByb2pldHMgZW5yZWdpc3Ryw6lzKSBvdSBgSW1wb3J0ZXIgdW4gcHJvamV0IGAgKGFyY2hpdmVzIC56aXAgc2UgdHJvdXZhbnQgZGFucyBsZSBkb3NzaWVyIGRlIHRyYXZhaWwpLiAgIA0KDQotIFBvdXIgY2hhbmdlciBsYSBsYW5ndWUgZGUgbCdpbnRlcmZhY2UgYXUgZnJhbsOnYWlzLCBjbGlxdWVyIHN1ciBsJ29uZ2xldCBgTGFuZ3VlYCBkYW5zIGxlIG1lbnUgZGUgZ2F1Y2hlLiAgDQoNCi0gTGUgZmljaGllciBwZXV0IMOqdHJlIGNyw6nDqSDDoCBwYXJ0aXIgZGUgZGlmZsOpcmVudGVzIHNvdXJjZXM6IGBDZXQgb3JkaW5hdGV1cmAgKHBvc3RlIGxvY2FsKSwgYEFkcmVzc2VzIHdlYiAoVVJMcylgLCBgUHJlc3NlLXBhcGllcmAgKGNvcGnDqS1jb2xsw6kpLCBgR29vZ2xlIGRhdGFgIChHb29nbGUgc2hlZXRzKS4uLikgZXQgZW4gZGlmZsOpcmVudHMgZm9ybWF0cyAoLmNzdiwgLnR4dCwgLnhtbCwgLnhscywgLkpTT04sIC56aXAgZXQgbm9uIHRhci4uLiAoY2VydGFpbmVzIGV4dGVuc2lvbnMgcGVybWV0dGVudCBsJ3VzYWdlIGQnYXV0cmVzIGZvcm1hdHMgY29tbWUgcmRmKS4gIA0KDQo8Y2VudGVyPiAgDQoNCiFbXShpbWFnZXMvT1IxLmpwZykgIA0KDQo8L2NlbnRlcj4gIA0KDQotIERldXggZmljaGllcnMgb3UgcGx1cyBwZXV2ZW50IMOqdHJlIGltcG9ydMOpcyBlbiBtw6ptZSB0ZW1wcy4gTGVzIGxpZ25lcyBzZXJvbnQgaW1wb3J0w6llcyB1bmUgw6AgbGEgc3VpdGUgZGUgbCdhdXRyZSBzZWxvbiBsJ29yZHJlIGQnaW1wb3J0YXRpb24gKHVuZSBjb2xvbm5lIHBlcm1ldHRhbnQgZCdpZGVudGlmaWVyIGxlIGZpY2hpZXIgc291cmNlIHNlcmEgY3LDqcOpZSBhdXRvbWF0aXF1ZW1lbnQpLiANCg0KPC9icj4NCg0KKioqDQoNCg0KIyMgMy4zLiBIaXN0b3JpcXVlIGRlcyBwcm9qZXRzDQoNCi0gTCdvbmdsZXQgYE91dnJpciB1biBwcm9qZXRgIHBlcm1ldDoNCiAgLSBEJ2FjY8OpZGVyIGV0IGQnb3V2cmlyIHRvdXMgbGVzIHByb2pldHMgZW5yZWdpc3Ryw6lzIGxvY2FsZW1lbnQuDQogIC0gRCfDqWRpdGVyIHNlcyBtw6l0YWRvbm7DqWVzLg0KICAtIEQnYWNjw6lkZXIgYXUgZG9zc2llciBkZSB0cmF2YWlsIChkw6lmaW5pIHBhciBkw6lmYXV0KSBvw7kgT3BlblJlZmluZSBzdG9ja2UgbGVzIGFyY2hpdmVzIGRlcyBwcm9qZXRzIGVucmVnaXN0csOpcyBwYXIgbGUgYmlhaXMgZHUgbGllbiBgUGFyY291cmlyIGxlIGRvc3NpZXIgZGUgbCdlc3BhY2UgZGUgdHJhdmFpbGAuDQoNCjxjZW50ZXI+ICANCg0KIVtdKGltYWdlcy9PUjMuanBnKQ0KDQo8L2NlbnRlcj4gIA0KDQo8L2JyPg0KDQoqKioNCg0KDQojIDQuIENyw6llciB1biBwcm9qZXQNCg0KLSBQb3VyIG91dnJpciB1biBmaWNoaWVyIMOgIHBhcnRpciBkZSBzb24gcG9zdGUsIGNsaXF1ZXIgc3VyIGBDcsOpZXIgdW4gcHJvamV0YCAtID4gYENldCBvcmRpbmF0ZXVyYCAtID4gYHPDqWxlY3Rpb25uZXIgZmljaGllcnNgIHN1ciBzb24gIHBvc3RlIC0+IGBTdWl2YW50YC4gIA0KDQotIFVuZSBmZW7DqnRyZSBzJ291dnJlIGVuc3VpdGUgcG91ciBwZXJtZXR0cmUgZGUgcHLDqS12aXN1YWxpc2VyIHNvbiBqZXUgZGUgZG9ubsOpZXMgZXQgZGUgbW9kaWZpZXIsIHNpIG7DqWNlc3NhaXJlLCBsZXMgb3B0aW9ucyBkJ2ltcG9ydGF0aW9uIGVuIGZvbmN0aW9uIGRlcyBjYXJhY3TDqXJpc3RpcXVlcyBkdSBmaWNoaWVyIGRlIGRvbm7DqWVzOiBtb2RpZmljYXRpb24gZHUgZm9ybWF0IGRlIGZpY2hpZXIgcydpbCBuJ2EgcGFzIMOpdMOpIGlkZW50aWZpw6kgY29ycmVjdGVtZW50ICg1KSwgbCdlbmNvZGFnZSBkZXMgY2FyYWN0w6hyZXMgW1VURi04XSAoNiksIGxlIHRyYWl0ZW1lbnQgZGVzIGVudMOqdGVzIGV0IHByZW1pw6hyZXMgbGlnbmVzICg5KS4uLg0KDQo8L2JyPg0KDQohW10oaW1hZ2VzL09SMi5qcGcpICANCg0KDQojIyBFeGVyY2ljZQ0KDQo8ZGl2IGNsYXNzID0gImJveDEiPg0KLSBDcsOpZXIgdW4gbm91dmVhdSBwcm9qZXQgZW4gaW1wb3J0YW50IHVuIGZpY2hpZXIgw6AgcGFydGlyIGRlIHNvbiBlbXBsYWNlbWVudCBzdXIgR2l0aHViOiBodHRwczovL2dpdGh1Yi5jb20vQ1JMTlAvb3BlbnJlZmluZSANCiAgLSBDbGlxdWVyIHN1ciBsZSBmaWNoaWVyICpJbmNpZGVudHMgbcOpdHJvLW10bC5jc3YqIC0+IENsaXF1ZXIgc3VyIGxlIGJvdXRvbiBSQVcgLT4gY29waWVyIGwnYWRyZXNzZSBkdSBuYXZpZ2F0ZXVyLg0KICAtIERhbnMgT3BlblJlZmluZSwgQ3LDqWVyIHVuIHByb2pldCAtPiBBZHJlc3NlcyB3ZWIgKFVSTHMpIC0+IGNvbGxlciBsZSBsaWVuIC0+IFN1aXZhbnQuDQooTGUgZmljaGllciBlc3QgYXVzc2kgZGlzcG9uaWJsZSBzdXIgbGUgc2l0ZSBbRG9ubsOpZXMgb3V2ZXJ0ZXMgTW9udHLDqWFsXShodHRwczovL2Rvbm5lZXMubW9udHJlYWwuY2Evc29jaWV0ZS1kZS10cmFuc3BvcnQtZGUtbW9udHJlYWwvaW5jaWRlbnRzLWR1LXJlc2VhdS1kdS1tZXRybykpLiAgICAgDQoNCi0gRXhwbG9yZXIgbGVzIG9wdGlvbnMgZCdpbXBvcnRhdGlvbiAtPiBQb3J0ZXIgdW5lIGF0dGVudGlvbiBwYXJ0aWN1bGnDqHJlIGF1eCBvcHRpb25zOiBgU3VwcHJpbWVyIGxlcyBlc3BhY2VzYCAoOCAtPiBjb2NoZXIpLCAJYFV0aWxpc2VyIGxlIGNhcmFjdMOocmUJIiBwb3VyIGZlcm1lciBsZXMgY2VsbHVsZXMgY29udGVuYW50IGxlcyBzw6lwYXJhdGV1cnMgZGUgY29sb25uZXNgICgxMCAtPiBjb2NoZXIgb3Ugbm9uKSwgYEFuYWx5c2VyIGxlIHRleHRlIGRlcyBjZWxsdWxlcyBjb21tZSBub21icmVzICwgZGF0ZXPigKZgICgxMSAtPiBkw6ljb2NoZXIpDQoNCi0gQ2hhbmdlciBsZSBgTm9tIGR1IHByb2pldGAgWzJdIGV0IGNsaXF1ZXIgc3VyIGBDcsOpZXIgdW4gcHJvamV0YCBbNF0gLSBFbiBjYXMgZGUgcHJvYmzDqG1lLCBpbCBlc3QgcG9zc2libGUgZGUgcmVjb21tZW5jZXIgbGUgcHJvY2Vzc3VzIFsxXS4NCjwvZGl2Pg0KDQo8L2JyPg0KDQoqKioNCg0KDQojIDUuIEV4cGxvcmVyIGwnaW50ZXJmYWNlDQoNCi0gTCdpbnRlcmZhY2UgZXN0IHNpbWlsYWlyZSDDoCBFeGNlbCBtYWlzIG9uIG5lIHBldXQgdm9pciBsJ2Vuc2VtYmxlIGRlcyBsaWduZXMsIGxhICJsb2dpcXVlIiBkJ09wZW5SZWZpbmUgcmVwb3NlIHN1ciBsZSB0cmF2YWlsIGVuICoqY29sb25uZXMqKi4NCg0KLSBPcGVuUmVmaW5lIHByb3Bvc2UgZGV1eCB2dWVzIGRlcyBkb25uw6llczogYGxpZ25lc2AgZXQgYGVudHLDqWVzLmAgTGVzIGRvbm7DqWVzIHNvbnQgZ8OpbsOpcmFsZW1lbnQgcHLDqXNlbnTDqWVzIGVuIG1vZGUgYGxpZ25lc2AsIGMnZXN0LcOgLWRpcmUgY2hhcXVlIGxpZ25lIHJlcHLDqXNlbnRlIHVuZSBvYnNlcnZhdGlvbi4gTGUgbW9kZSBgZW50csOpZXNgIHBlcm1ldCBkJ2Fzc29jaWVyIHBsdXNpZXVycyBsaWduZXMgw6AgdW5lIG9ic2VydmF0aW9uLg0KDQotIElsIGVzdCBkb25jIHBvc3NpYmxlIGRlIG1vZGlmaWVyIGxhIHN0cnVjdHVyZSBkdSBmaWNoaWVyIHBvdXIgcXVlIHBsdXNpZXVycyBsaWduZXMgc29pZW50IGFzc29jacOpZXMgw6AgdW4gc2V1bCBjYXMgZW4gc2UgYmFzYW50IHN1ciBsYSBjb2xvbm5lIGNsw6kgKCoqc2V1bGUgbGEgbGlnbmUgb3JpZ2luYWxlIHNlcmEgbnVtw6lyb3TDqWUqKiksIG1haXMgZG9pdCBzZSBmYWlyZSBhdmVjIHByw6ljYXV0aW9ucy4gUG91ciBsZXMgbG9naWNpZWxzIGQnYW5hbHlzZSwgbGUgZm9ybWF0ICp0aWR5KiAoYGxpZ25lc2ApIGVzdCDDoCBwcml2aWzDqWdpZXIuDQoNCjxjZW50ZXI+ICANCg0KIVtdKGltYWdlcy9PUjQuanBnKSANCg0KPC9jZW50ZXI+ICANCg0KMS4gTGllbiBzb3VzIGwnaWPDtG5lIHJlbnZvaSB2ZXJzIGxhIHBhZ2UgZCdhY2N1ZWlsL2ltcG9ydGF0aW9uLg0KMi4gUmVub21tZXIgbGUgbm9tIGRlIHNvbiBwcm9qZXQgZW4gdG91dCB0ZW1wcy4NCjMuIFBlcm1hbGllbiBxdWkgcGVybWV0IGRlIHJldmVuaXIgw6AgdW5lIHZ1ZSBwcsOpY2lzZSAoYWZmaWNoYWdlLCB0cmksIGZhY2V0dGVzLi4uKSBkdSBwcm9qZXQuDQo0LiBOb21icmUgZGUgbGlnbmVzL29ic2VydmF0aW9ucyBkdSBmaWNoaWVyLg0KNS4gQ2hhbmdlbWVudCBkdSBtb2RlIGxpZ25lcyBvdSBvYnNlcnZhdGlvbnMuDQo2LiBNb2RpZmllciBsZSBub21icmUgZGUgbGlnbmVzIGFmZmljaMOpZXMuDQo3LiBQYXNzZXIgZCd1bmUgcGFnZSDDoCBsJ2F1dHJlLg0KOC4gT3V2cmlyIHVuIG5vdXZlbCBvbmdsZXQgT3BlblJlZmluZS4NCjkuIEV4cG9ydGVyIGxlIGZpY2hpZXIgZW4gZGlmZsOpcmVudHMgZm9ybWF0cy4NCg0KPC9icj4NCg0KKioqDQoNCg0KIyMgNS4xLiBMJ8OpZGl0aW9uIGRlIGNlbGx1bGVzDQoNCi0gSWwgZXN0IHBvc3NpYmxlIGQnw6lkaXRlciBtYW51ZWxsZW1lbnQgbGUgY29udGVudSBkZSBjZWxsdWxlcyBpbmRpdmlkdWVsbGVzIGVuIHNlIHBsYcOnYW50IHN1ciBjaGFjdW5lIGV0IGVuIGNsaXF1YW50IGBlZGl0YCwgbWFpcyBPcGVuUmVmaW5lIHByaXZpbMOpZ2llIGxlICoqdHJhdmFpbCBlbiBsb3QgcGFyIGNvbG9ubmVzKiogcG91ciBmaWx0cmVyLCB0cmllciwgdHJhbnNmb3JtZXIuDQoNCi0gTCfDqWRpdGlvbiBkaXJlY3RlIHBldXQgcydhcHBsaXF1ZXIgaW5kaXZpZHVlbGxlbWVudCBvdSBzdXIgdG91dGVzIGxlcyBjZWxsdWxlcyBhdmVjIGxhIG3Dqm1lIHZhbGV1ciBkYW5zIGNldHRlIGNvbG9ubmUuDQoNCi0gUGVybWV0IMOpZ2FsZW1lbnQgZGUgbW9kaWZpZXIgbGUgZm9ybWF0IGRlIGxhIGNlbGx1bGUuDQoNCjxjZW50ZXI+ICANCg0KIVtdKGltYWdlcy9PUjIyLmpwZyl7d2lkdGg9ODAlfQ0KDQo8L2NlbnRlcj4gIA0KDQoNCg0KIyMgRXhlcmNpY2UNCg0KPGRpdiBjbGFzcyA9ICJib3gxIj4NCi0gRGFucyBsYSBjb2xvbm5lICpDYXVzZSBwcmltYWlyZSogY2xpcXVlciBkYW5zIHVuZSBjZWxsdWxlICpBdXRyZXMqLCDDqWRpdGVyIHNvbiBjb250ZW51IHBvdXIgKmF1dHJlKiBldCBhcHBsaXF1ZXIgw6AgbGEgY2VsbHVsZS4gDQoNCi0gRGFucyBsYSBjb2xvbm5lICrDiXZhY3VhdGlvbiosIG1vZGlmaWVyIGxlIGNvbnRlbnUgZCd1bmUgY2VsbHVsZSAiIyIgcGFyICpOb24qIGV0IGFwcGxpcXVlciDDoCB0b3V0ZXMgbGVzIGNlbGx1bGVzIGlkZW50aXF1ZXMuDQo8L2Rpdj4NCg0KPC9icj4NCg0KKioqDQoNCg0KIyMgNS4yLiBGb3JtYXQgZGVzIGRvbm7DqWVzICANCg0KDQojIyMjIFRyb2lzIGZvcm1hdHMgZGUgYmFzZTogDQogIDEuIENoYcOubmUgZGUgY2FyYWN0w6hyZXMNCiAgMi4gTm9tYnJlDQogIDMuIERhdGUgKG5vcm1lIElTTy04NjAxIFlZWVktTU0tRERUSEg6TU06U1NaKSoNCiAgDQoNCiAgDQojIyMjIERldXggZm9ybWF0cyBkw6ljb3VsYW50IGQnYWN0aW9uczogDQogIC0gRXJyZXVyIChmb3JtYXQgYXR0cmlidcOpIHN1aXRlIMOgIHVuZSBlcnJldXIgZGUgdHJhbnNmb3JtYXRpb24pICANCiAgLSBOdWxsKioNCg0KDQoNCiMjIyMgRGV1eCBhdXRyZXMgdHlwZXMgcGFydGljdWxpZXJzIGTDqWNvdWxhbnQgZGUgbWFuaXB1bGF0aW9ucw0KICAtIEJvb2zDqWVuICh2YWxldXIgYmluYWlyZSBUIG91IEYpDQogIC0gKkFycmF5KiAobGlzdGUgZGUgdmFsZXVycyBzw6lwYXLDqWVzIHBhciB1bmUgdmlyZ3VsZSBlbnRyZSBjcm9jaGV0cyBwb3V2YW50IMOqdHJlIHRyYW5zZm9ybcOpZXMpDQoNCjwvYnI+DQoNCiMjIyMjICogRm9ybWF0IGRhdGUNCg0KLSBTZWxvbiBsZXMgYmVzb2lucywgbGVzIGRhdGVzIHBldXZlbnQgw6p0cmUgdHJhaXTDqWVzIHNvdXMgZm9ybWUgZGUgYHRleHRlYCwgZGUgYG5vbWJyZWAgb3UgYGRhdGVgIChsZSBmb3JtYXQgZGF0ZSBlc3Qgc3VydG91dCBuw6ljZXNzYWlyZSBwb3VyIGxlcyBjYWxjdWxzIGRlIGRhdGVzKS4NCi0gTGUgZm9ybWF0IGRhdGUgcmVwb3NlIHN1ciB1bmUgc8OpcmllIGQnb3V0aWxzIGV0IGRlICBzdGFuZGFyZHMgcG91ciByZWNvbm5haXRyZSBldCBjb252ZXJ0aXIgbGVzIHZhbGV1cnMgb3JpZ2luYWxlcyBlbiBkYXRlLiANCi0gUG91ciBxdSd1bmUgY2VsbHVsZSBzb2l0IHJlY29ubnVlIGNvbW1lIGRhdGUsIGVsbGUgc2VyYSB0cmFuc2Zvcm3DqWUgYXUgZm9ybWF0ICpJU08tODYwMS1jb21wbGlhbnQqLg0KLSBQb3NzaWJsZSBkZSBtb2RpZmllciBjZSBmb3JtYXQgcG91ciBxdSdpbCBzb2l0IHBsdXMgZmFjaWxlbWVudCBsaXNpYmxlIMOgIGwnZXhwb3J0YXRpb24uDQoNCjwvYnI+DQoNCiMjIyMjICoqIEZvcm1hdCAibWFucXVhbnQiDQoNCi0gT3BlblJlZmluZSBmYWl0IHVuZSBkaXN0aW5jdGlvbiBlbnRyZSBsZXMgKipjZWxsdWxlcyB2aWRlcyBhdmVjIGVzcGFjZXMgYmxhbmNzKiogKHF1aSBuZSBzb250IHBhcyB2aWRlcyEpLCBsZXMgKip2YWxldXJzIHZpZGVzKiogKGNoYWluZSBkZSBsb25ndWV1ciAwKSwgZXQgbGVzICoqdmFsZXVycyAibnVsbCIqKiAodHlwZSBzcMOpY2lhbCBxdWkgbidlc3QgcGFzIHVuZSBjaGFpbmUgZGUgY2FyYWN0w6hyZXMpLiBMZXMgKnZpZGVzKiBldCBsZXMgKm51bGwqIHNvbnQgYXVzc2kgY29uc2lkw6lyw6lzIGNvbW1lICpCbGFuayouDQotIFBsdXNpZXVycyBmb25jdGlvbnMgYXV0b21hdGlzw6llcyBzb3VzIGBGYWNldHRlc2AgZXQgYMOJZGl0ZXIgbGVzIGNlbGx1bGVzYCBwZXJtZXR0ZW50IGRlIGfDqXJlciBjZXMgdHlwZXMgZGUgdmFsZXVycy4NCg0KPC9icj4NCg0KIyMgRXhlcmNpY2UNCg0KPGRpdiBjbGFzcyA9ICJib3gxIj4NCg0KKipUcmFuc2Zvcm1lciB1bmUgY29sb25uZSBkZSBmb3JtYXQgY2FyYWN0w6hyZSBlbiBmb3JtYXQgZGF0ZSoqOiAgDQotIERhbnMgbGEgY29sb25uZSAqSm91ciBjYWxlbmRhaXJlKjogYE1lbnUgLT4gw4lkaXRlciBsZXMgY2VsbHVsZXMgLT4gVHJhbnNmb3JtYXRpb25zIGNvdXJhbnRlcyAtPiBFbiBkYXRlYCAgICANCg0KKipUcmFuc2Zvcm1lciB1bmUgY29sb25uZSBkZSBmb3JtYXQgY2FyYWN0w6hyZSBlbiBmb3JtYXQgbm9tYnJlKio6ICAgDQotIERhbnMgbGEgY29sb25uZSAqUG9ydGUqLCBjbGlxdWVyIGRhbnMgdW5lIGNlbGx1bGUsIMOpZGl0ZXIgbGUgZm9ybWF0IMOgICpOb21icmUqIGV0IGFwcGxpcXVlciDDoCB0b3V0ZXMgbGVzIGNlbGx1bGVzIGlkZW50aXF1ZXMuDQotIFJlY29tbWVuY2VyIGxhIHByb2PDqWR1cmUgYXZlYyBsZSBmb25jdGlvbiAqVHJhbnNmb3JtYXRpb25zIGNvdXJhbnRlcyouDQoNCjwvZGl2Pg0KDQo8L2JyPg0KDQo8ZGl2IGNsYXNzID0gIm5vdGUiPg0KLSDDgCBsJ2ltcG9ydGF0aW9uIGQndW4gZmljaGllciwgY2hhcXVlIGNlbGx1bGUgc2UgdmVycmEgYXR0cmlidWVyIHVuIGZvcm1hdC4gDQotIFBhciBkw6lmYXV0LCBsZSBjb250ZW51IGRlcyBjZWxsdWxlcyBlc3QgZGUgZm9ybWF0IGNoYcOubmVzLiAgDQotIExlIGNvbnRlbnUgZGVzIGNlbGx1bGVzIHJlY29ubnUgY29tbWUgbnVtw6lyaXF1ZSBldCBkYXRlIHNlcmEgZGUgY291bGV1ciB2ZXJ0ZS4gIA0KLSBMZSBmb3JtYXQgcGV1dCDDqnRyZSBtb2RpZmnDqSBkZSBkaWZmw6lyZW50ZXMgZmHDp29uczogQm91dG9uIGBlZGl0YCwgYFRyYW5zZm9ybWF0aW9ucyBjb3VyYW50ZXNgLCBGZW7DqnRyZSBHUkVMLiAgDQotIENlIGZvcm1hdCBhdXJhIHVuIGltcGFjdCBzdXIgbGVzIGFjdGlvbnMgcG9zc2libGVzLiAgDQotIExlIGNoYW5nZW1lbnQgZGUgZm9ybWF0IHBhciDDqWRpdGlvbiBkaXJlY3RlIGQndW5lIGNlbGx1bGUgZXN0IHVuZSBvcMOpcmF0aW9uIGRpc3RpbmN0ZSBkZSBsYSB0cmFuc2Zvcm1hdGlvbiBkdSBjb250ZW51LiBMYSBwcmVtacOocmUgb3DDqXJhdGlvbiBhcnJpdmUgcGFyZm9pcyDDoCBjaGFuZ2VyIGRlcyBmb3JtYXRzIHF1ZSBsYSB0cmFuc2Zvcm1hdGlvbiBuZSBwZXV0IGZhaXJlLg0KLSBQb3VyIHBsdXMgZCdpbmZvcm1hdGlvbiBzdXIgbGVzIGZvcm1hdHMsIHZvaXIgbGEgW2RvY3VtZW50YXRpb24gb2ZmaWNpZWxsZV0oaHR0cHM6Ly9kb2NzLm9wZW5yZWZpbmUub3JnL21hbnVhbC9leHBsb3JpbmcpLiAgDQo8L2Rpdj4NCg0KPC9icj4NCg0KKioqDQoNCg0KIyMgNS4zLiBMYSBnZXN0aW9uIGRlcyBsaWduZXMgZXQgY29sb25uZXMNCg0KIyMjIyBMYSBnZXN0aW9uIGRlcyBjb2xvbm5lcyBwZXV0IHNlIGZhaXJlOg0KDQotIFN1ciBjaGFxdWUgY29sb25uZTogDQogIC0gRm9uY3Rpb25zIHNvdXMgYMOJZGl0ZXIgbGEgY29sb25uZSAtPiBEw6lwbGFjZXIgLi4uIC8gUmVub21tZXIgLyBTdXBwcmltZXJgICAgDQogIC0gRm9uY3Rpb25zIHNvdXMgYEFwZXLDp3UgLT4gTWFzcXVlci4uLiBgICAgDQoNCjwvYnI+DQoNCi0gU3VyIGxhIGNvbG9ubmUgYFRvdXRlc2A6ICAgICANCiAgLSBgw4lkaXRlciBsZXMgY29sb25uZXMgLT4gUmV0cmllci1zdXBwcmltZXIsIGdlc3Rpb24gZGVzIHZhbGV1cnMgY29uc8OpY3V0aXZlc2AgICAgDQogIC0gYEFwZXLDp3UgLT4gQWZmaWNoZXItbWFzcXVlcmAuLi4gIA0KDQo8L2JyPg0KDQojIyMjIExhIGdlc3Rpb24gZGVzIGxpZ25lczoNCg0KLSBMYSBzw6lsZWN0aW9uIGRlIGxpZ25lcyBwZXV0IHNlIGZhaXJlIHBhciBsZSBiaWFpcyBkZSBmaWx0cmVzLCBmYWNldHRlcyBldCBhdXRyZXMgbWFuaXB1bGF0aW9ucyBwZXJzb25uYWxpc8OpZXMuICANCi0gSWwgZXN0IGF1c3NpIHBvc3NpYmxlIGRlIG1hcnF1ZXIvw6l0b2lsZXIgZGVzIGxpZ25lcyBlbiBsb3Qgb3UgaW5kaXZpZHVlbGxlbWVudCBwdWlzIGRlIGNyw6llciB1bmUgZmFjZXR0ZSBzdXIgbGEgY29sb25uZSBgVG91dGVzYCBwb3VyIHPDqWxlY3Rpb25uZXIgbGVzIGxpZ25lcyBtYXJxdcOpZXMgKGB0cnVlYCkuICANCi0gT24gcGV1dCBlbnN1aXRlIHN1cHByaW1lciBsZXMgbGlnbmVzIGZpbHRyw6llczogYFRvdXRlcyAtPiDDiWRpdGVyIGxlcyBsaWduZXMgLT4gU3VwcHJpbWVyIGxlcyBsaWduZXMgY29ycmVzcG9uZGFudGVzYC4gIA0KDQo8L2JyPg0KDQojIyBFeGVyY2ljZQ0KDQo8ZGl2IGNsYXNzID0gImJveDEiPg0KKipTdXBwcmltZXIgdW5lIGNvbG9ubmU6ICoqICANCi0gU3VyIGxhIGNvbG9ubmUgKlR5cGUgZCdpbmNpZGVudCogLT4gYMOJZGl0ZXIgbGEgY29sb25uZSAtPiBTdXBwcmltZXIgY2V0dGUgY29sb25uZWAuICANCg0KKipTdXBwcmltZXIgcGx1c2lldXJzIGNvbG9ubmVzOiAqKiAgDQotIFN1ciBsYSBjb2xvbm5lICpUb3V0ZXMqIC0+IGDDiWRpdGVyIGxhIGNvbG9ubmUgLT4gw4lkaXRlci9TdXBwcmltZXIgbGVzIGNvbG9ubmVzYCAtPiAqS0ZTKiBldCAqQ0FUKi4gIA0KDQo8L2Rpdj4NCg0KKioqDQoNCg0KIyMgNS40LiBIaXN0b3JpcXVlIChVbmRvL1JlZG8pDQoNCi0gVG91dGVzIGxlcyBhY3Rpb25zIHNvbnQgZW5yZWdpc3Ryw6llcyAobG9nIGRlIHNlcyBtYW5pcHVsYXRpb25zKSBldCBwZXV2ZW50IMOqdHJlIGFubnVsw6llcyBlbiByZWN1bGFudCDDqXRhcGUgcGFyIMOpdGFwZSBkYW5zIGwnaGlzdG9yaXF1ZS4gIA0KLSBMYSBwcmVtacOocmUgYWN0aW9uIGQndW4gaGlzdG9yaXF1ZSBlc3QgbGEgY3LDqWF0aW9uIGR1IHByb2pldC4gIA0KLSBQdWlzcXVlIGwnaGlzdG9yaXF1ZSBmYWl0IHBhcnRpZSBkdSBwcm9qZXQgZW5yZWdpc3Ryw6kgZGFucyBsZSBkb3NzaWVyIGRlIHRyYXZhaWwsIGlsIG5lIGRpc3BhcmFpdCBwYXMgw6AgbGEgZmVybWV0dXJlIGRlIGxhIHNlc3Npb24uIA0KLSBMJ2hpc3RvcmlxdWUgcGV1dCDDqnRyZSBleHRyYWl0IGVuIGZvcm1hdCBKU09OLCBjb3BpZXIvY29sbGVyIGRhbnMgbm90ZXBhZCBldCBhcHBsaXF1ZXIgZGUgbm91dmVhdS4gIA0KDQo8Y2VudGVyPiAgDQoNCiFbXShpbWFnZXMvT1IxOS5qcGcpe3dpZHRoPTYwJX0NCg0KPC9jZW50ZXI+ICANCg0KKipBdHRlbnRpb24hKioNCg0KLSBTaSBvbiByZWN1bGUgZGFucyBsZSB0ZW1wcyBldCBxdSdvbiBmYWl0IHVuZSBtb2RpZmljYXRpb24sIGxlcyDDqXRhcGVzIHF1aSBzdWl2ZW50IGRhbnMgbCdoaXN0b3JpcXVlIGRpc3BhcmFpc3NlbnQgcG91ciBkZSBib24uICANCg0KLSBMZXMgbWFuaXB1bGF0aW9ucyByZWxhdGl2ZXMgw6AgbCdhZmZpY2hhZ2UgbmUgc29udCBwYXMgZW5yZWdpc3Ryw6llcyBkYW5zIGwnaGlzdG9yaXF1ZSwgc2V1bGVtZW50IGxlcyB0cmFuc2Zvcm1hdGlvbnMuIEwnZW5yZWdpc3RyZW1lbnQgYXV0b21hdGlxdWUgbmUgY29tcHJlbmQgZG9uYyBwYXMgbGVzIGZhY2V0dGVzIGV0IGZpbHRyZXMgKHZ1ZSBkZSBsJ2ludGVyZmFjZSkgLSBwZXJkIGNlIHF1aSBuJ2FwcGFyYWl0IHBhcyBkYW5zIGxlIGBEw6lmYWlyZS9SZWZhaXJlYC4NCg0KLSBMJ8OpZGl0aW9uIGRpcmVjdGUgZGFucyBsZXMgY2VsbHVsZXMgYXBwYXJhaXQgZGFucyBsJ2hpc3RvcmlxdWUgbWFpcyBuZSBwZXV0IMOqdHJlIGV4cG9ydMOpZS4gIA0KDQotIEZhY2V0dGVzIGV0IGZpbHRyZXMgcydlbnJlZ2lzdHJlbnQgZ3LDomNlIGF1IGBwZXJtYWxpZW5gLiAgDQoNCjwvYnI+DQoNCioqKg0KDQoNCiMgNi4gTWVudSBldCBmb25jdGlvbnMNCg0KT3BlbiBSZWZpbmUgcGVybWV0IGRlIHRyYXZhaWxsZXIgZGUgKipkZXV4IGZhw6dvbnMqKjogIA0KDQoNCjEuIEF2ZWMgbCdlbnNlbWJsZSBkZXMgKipmb25jdGlvbnMgYXV0b21hdGlzw6llcyoqIHF1ZSBsJ29uIHJldHJvdXZlIGRhbnMgbGVzIG1lbnVzLg0KDQoyLiBFbiByw6lkaWdlYW50IHNlcyBwcm9wcmVzIFtleHByZXNzaW9uc10oaHR0cHM6Ly9kb2NzLm9wZW5yZWZpbmUub3JnL21hbnVhbC9leHByZXNzaW9ucykgYXZlYyBsZSAqKmxhbmdhZ2UgR1JFTCoqLiAgDQoNCiAgLSBNw6ptZSBsb3JzcXVlIGwnb24gdXRpbGlzZSBsZXMgZm9uY3Rpb25zIGF1dG9tYXRpc8OpZXMsIGlsIGVzdCBwb3NzaWJsZSBkJ2VuIG1vZGlmaWVyIGxlIGZvbmN0aW9ubmVtZW50IGVuIMOpZGl0YW50IGRpcmVjdGVtZW50IGxhIHN5bnRheGUgR1JFTCBjb3JyZXNwb25kYW50ZS4gDQoNCjwvYnI+DQoNCiMjIDYuMS4gVXRpbGlzZXIgbGVzIGZvbmN0aW9ucyBhdXRvbWF0aXPDqWVzOg0KDQotIExlIG1lbnUgZXQgbCdlbnNlbWJsZSBkZSBzZXMgZm9uY3Rpb25zIGF1dG9tYXRpc8OpZXMgYXBwYXJhaXNzZW50IGVuIGNsaXF1YW50IHN1ciBsYSBmbMOoY2hlIGRlIGwnaW50aXR1bMOpIGRlIGNoYXF1ZSBjb2xvbm5lLg0KDQotIExlcyBmb25jdGlvbnMgZGlzcG9uaWJsZXMgc291cyBsZSBtZW51IGRlIGxhIHByZW1pw6hyZSBjb2xvbm5lIGBUb3V0ZXNgIHNlIGRpc3Rpbmd1ZW50IGRlcyBhdXRyZXMgcHVpc3F1J2VsbGVzIHBlcm1ldHRlbnQgZCdhcHBsaXF1ZXIgZGVzIGZvbmN0aW9ucyDDoCBsJ2Vuc2VtYmxlIGRlcyBjb2xvbm5lcyBkdSBmaWNoaWVyOiBNYXJxdWVyLCDDqXRvaWxlciwgc3VwcHJpbWVyLCBtYXNxdWVyLi4uDQoNCjwvYnI+DQoNCioqTWVudSBldCBmb25jdGlvbnMgZGUgY2hhcXVlIGNvbG9ubmUtdmFyaWFibGUqKg0KDQo8L2JyPg0KDQohW10oaW1hZ2VzL09SMTIuanBnKXt3aWR0aD05MCV9DQoNCjwvYnI+DQoNCioqTWVudSBldCBmb25jdGlvbnMgZGUgbGEgY29sb25uZSBgVG91dGVzYCoqDQoNCiFbXShpbWFnZXMvT1IyMS5qcGcpe3dpZHRoPTkwJX0NCg0KPC9icj4NCg0KKioqDQoNCiMjIDYuMi4gw4ljcmlyZSBzZXMgZm9uY3Rpb25zIGF2ZWMgR1JFTA0KDQo8L2JyPg0KDQpFeHByZXNzaW9ucyBzaW1pbGFpcmVzIGF1eCBmb3JtdWxlcyBFeGNlbCBtYWlzIHF1aSBzJ2FwcGxpcXVlbnQgYXV4IGNvbG9ubmVzLCBub24gYXV4IGNlbGx1bGVzLCBldCBxdWkgbmUgc29udCBwYXMgc3RvY2vDqWVzIMOgIG3Dqm1lIGxlcyBkb25uw6llcyBtYWlzIGRhbnMgdW4gc2NyaXB0LiAgDQoNCjwvYnI+DQoNCiFbXShpbWFnZXMvT1IxNC5qcGcpDQoNCjwvYnI+DQoNCioqTGUgbGFuZ2FnZSBHUkVMIHBldXQgcyd1dGlsaXNlciBkZSBkaWZmw6lyZW50ZXMgZmHDp29uczoqKiAgDQoNCi0gRW4gY3LDqWFudCBkZXMgZmFjZXR0ZXMgcGVyc29ubmFsaXPDqWVzIDogYEZhY2V0dGUgLT4gRmFjZXR0ZSB0ZXh0dWVsbGUgcGVyc29ubmFsaXPDqWVgLiAgDQoNCi0gRW4gdHJhbnNmb3JtYW50IHVuZSBjb2xvbm5lOiBgw4lkaXRlciBsZXMgY2VsbHVsZXMgLT4gdHJhbnNmb3JtZXJgIChhdXNzaSBzb3VzIGBUb3V0ZXMgLT4gVHJhbnNmb3JtZXJgKS4gIA0KDQotIEVuIGNyw6lhbnQgdW5lIG5vdXZlbGxlIGNvbG9ubmU6IGDDiWRpdGVyIGxhIGNvbG9ubmUgLT4gQWpvdXRlciB1bmUgY29sb25uZSBiYXPDqWUgc3VyIGNldHRlIGNvbG9ubmVgLiAgDQoNCjwvYnI+DQoNCioqTGVzIGZpbHRyZXMgZXQgbGVzIHRyYW5zZm9ybWF0aW9ucyBwbHVzIGNvbXBsZXhlcyBwZXV2ZW50IGF1c3NpIG7DqWNlc3NpdGVyIGwndXNhZ2UgZCdbZXhwcmVzc2lvbnMgcsOpZ3VsacOocmVzIChyZWdleCldKGh0dHBzOi8vcmVnZXgxMDEuY29tLykqKg0KDQo8L2JyPg0KDQoqKioNCg0KDQojIyA2LjMuIFRyaWVyIHVuIGZpY2hpZXINCg0KLSBMZXMgZG9ubsOpZXMgYXBwYXJhaXNzZW50IGRhbnMgbCdvcmRyZSBkdSBmaWNoaWVyIG9yaWdpbmFsLg0KLSBQb3VyIG1vZGlmaWVyIGwnb3JkcmUgZCdhcHBhcml0aW9uIGRlcyBvYnNlcnZhdGlvbnMsIGFwcGxpcXVlciB1biBvdSBkZXMgdHJpcyBzdXIgbGVzIGNvbG9ubmVzIGF2ZWMgYFRyaWVyLi4uYA0KLSBQb3VyIGNvbWJpbmVyIHBsdXNpZXVycyB0cmlzIHN1ciBkaWZmw6lyZW50ZXMgY29sb25uZXM6IEZhaXJlIHVuIHRyaWUgc3VyIHVuZSBjb2xvbm5lIHB1aXMgc3VyIHVuZSBhdXRyZSBlbiBtb2RpZmlhbnQgc2kgbsOpY2Vzc2FpcmUgbCdvcHRpb24gYFRyaWVyIHNlbG9uIGNldHRlIHNldWxlIGNvbG9ubmVgLg0KLSBMZXMgdHJpcyBuZSBzb250IHF1ZSB0ZW1wb3JhaXJlcyBldCBuJ2FmZmVjdGVudCBkb25jIHF1ZSBsJ2FmZmljaGFnZS4gUG91ciBxdSdpbHMgc29pZW50IHBlcm1hbmVudHMgKHJlbnVtw6lyb3RhdGlvbiBkZXMgbGlnbmVzKTogYFRyaWVyIC0+IFJldHJpZXIgbGVzIGxpZ25lcyBkZSBmYcOnb24gcGVybWFuZW50ZWAqLiAgDQotIElsIGVzdCBwb3NzaWJsZSBkZSBzdXBwcmltZXIgZXQgZCdpbnZlcnNlciBsZSB0cmkgw6AgcGFydGlyIGRlcyBvcHRpb25zIHN1ciBjaGFxdWUgY29sb25uZSBvdSBncsOiY2Ugw6AgbGEgZm9uY3Rpb24gYFRyaWVyYCBkdSBoYXV0LiAgDQoNCiAqTGUgdHJpIHBlcm1hbmVudCBhZmZlY3RlIHRvdXQgbGUgZmljaGllciwgcGFzIHNldWxlbWVudCBsYSB2dWUgZmlsdHLDqWUuICANCg0KIVtdKGltYWdlcy9PUjYuanBnKSANCg0KIyMgRXhlcmNpY2UNCg0KPGRpdiBjbGFzcyA9ICJib3gxIj4NCi0gVHJpZXIgbGVzIHZhbGV1cnMgZGUgbGEgY29sb25uZSBgSm91ciBjYWxlbmRhaXJlYCBlbiBmb3JtYXQgYGRhdGUgYW50w6ljaHJvbm9sb2dpcXVlYC4gIA0KLSBRdWVsbGUgZXN0IGxhIGRlcm5pw6hyZSBkYXRlIGQnaW5jaWRlbnQgZW5yZWdpc3Ryw6llIGRhbnMgbGUgZmljaGllciA/ICANCi0gU3VwcHJpbWVyIGxlIHRyaS4gIA0KPC9kaXY+DQo8L2JyPg0KDQo8ZGl2IGNsYXNzID0gImJveDEiPg0KLSBUcmllciBsZXMgdmFsZXVycyBkZXMgY2VsbHVsZXMgY29tbWUgdGV4dGUgZGUgbGEgY29sb25uZSBgTW9pcyBDYWxlbmRyaWVyYCAuICAgDQotIFRyaWVyIGxlcyB2YWxldXJzIGRlcyBjZWxsdWxlcyBjb21tZSB0ZXh0ZSBkZSBsYSBjb2xvbm5lIGBKb3VyIGR1IG1vaXNgLiAgDQotIEV4cGxvcmVyIGxlIHLDqXN1bHRhdC4uLiAgIA0KLSBTdXBwcmltZXIgbGUgdHJpIGV0IHJlY29tbWVuY2VyIGxhIHByb2PDqWR1cmUgYXZlYyB1biB0cmkgZGUgZm9ybWF0IG5vbWJyZS4gIA0KPC9kaXY+DQoNCjwvYnI+DQoNCioqKg0KDQoNCiMjIDYuNC4gRmlsdHJlciBsZSB0ZXh0ZQ0KDQotIExhIGZvbmN0aW9uIGBGaWx0cmVyIGxlIHRleHRlYCBwZXJtZXQgZGUgY2hlcmNoZXIgdW5lIG91IGRlcyBjaGFpbmVzIGRlIGNhcmFjdMOocmVzIGRhbnMgdW5lIG91IHBsdXNpZXVycyB2YXJpYWJsZXMuICANCi0gUGVybWV0IGRlIHJlY2hlcmNoZXIgZGVzIGNoYWluZXMgZGUgY2FyYWN0w6hyZXMgZGFucyB1bmUgY29sb25uZSBldCBkZSBjb21iaW5lciBkZXMgZmlsdHJlcyBhcHBsaXF1w6lzIHN1ciBwbHVzaWV1cnMgY29sb25uZXMgcG91ciByYWZmaW5lciBsYSByZWNoZXJjaGUuICANCi0gRm9uY3Rpb24gcGx1cyBleHDDqWRpdGl2ZSBxdWUgbGVzIGZhY2V0dGVzIHF1YW5kIG9uIG5lIHZldXQgcXVlIGNoZXJjaGVyIHVuZSBjaGFpbmUgZGUgY2FyYWN0w6hyZXMuICANCi0gTCdhZmZpY2hhZ2UgZGVzIGxpZ25lcyBzZSBsaW1pdGVyYSBhdSBub21icmUgZGUgY2FzIGNvcnJlc3BvbmRhbnRzIGF1eCBjcml0w6hyZXMgZGUgcmVjaGVyY2hlIGluc2NyaXRzIGRhbnMgbGVzIGJvaXRlcyBkZSBmaWx0cmVzLiAgDQotICoqVGFudCBxdWUgbGVzIGZpbHRyZXMgc2Vyb250IGFjdGlmcywgbGVzIGFjdGlvbnMgc3Vic8OpcXVlbnRlcyBzZSBsaW1pdGVyb250IMOgIGNlcyBjYXMgZmlsdHLDqXMuKiogIA0KDQohW10oaW1hZ2VzL09SNy5qcGcpIA0KDQojIyBFeGVyY2ljZQ0KDQo8ZGl2IGNsYXNzID0gImJveDEiPg0KKipMaW1pdGVyIGxhIGxpc3RlIGF1eCBjYXMgc3VydmVudXMgw6AgbGEgc3RhdGlvbiBCZXJyaSBlbnRyZSBtaWRpIGV0IDEzaC4qKg0KLSBGaWx0cmVyIGxlIHRleHRlIHN1ciBsYSBjb2xvbm5lICpDb2RlIGRlIGxpZXUqOiAiYmVycmkiICANCi0gRmlsdHJlciBsZSB0ZXh0ZSBzdXIgbGEgY29sb25uZSAqSGV1cmUgZGUgbCdpbmNpZGVudCo6ICIxMiIgIA0KLSBFeHBsb3JlciBsZXMgcsOpc3VsdGF0cyAgDQotIENvbW1lbnQgcydhc3N1cmVyIGQnYXZvaXIgc2V1bGVtZW50IGxlcyBjYXMgc3VydmVudXMgZW50cmUgMTJoIGV0IDEzaD8gQ29tYmllbiBkZSBsaWduZXMgY29ycmVzcG9uZGVudCDDoCBjZXMgY29uZGl0aW9ucz9eWzEyOiBvdSBleHByZXNzaW9uIHJhdGlvbm5lbGxlIF4xMiAvIDQ4IGNhc10gIA0KLSBTdXBwcmltZXIgdG91cyBsZXMgZmlsdHJlcy4NCjwvZGl2Pg0KDQo8L2JyPg0KDQoqKioNCg0KDQojIDcuIExlcyBmYWNldHRlcw0KDQojIyA3LjEgQ2FyYWN0w6lyaXN0aXF1ZXMNCg0KPGRpdiBjbGFzcyA9ICJyaWdodCI+DQo8aW1nIHNyYz0iaW1hZ2VzL09SMzQuanBnIiAgd2lkdGg9IjYwJSIgLz4NCjwvZGl2Pg0KDQotIExlcyBmYWNldHRlcyBjb25zdGl0dWVudCBsYSBtYXJxdWUgZGUgY29tbWVyY2UgZCdPcGVuUmVmaW5lLCBkJ2/DuSBsZSBsb2dvISANCg0KLSBGb25jdGlvbm5hbGl0w6kgcHVpc3NhbnRlIHF1aSBwZXJtZXQgZCdleHBsb3JlciBldCBkZSBmaWx0cmVyIHNlcyBkb25uw6llcyBlbiBmb25jdGlvbiBkZSBkaWZmw6lyZW50ZXMgY29uZGl0aW9ucy4gIA0KDQotIE4nYWZmZWN0ZW50IHBhcyBkaXJlY3RlbWVudCBsZXMgZG9ubsOpZXMsIHNldWxlbWVudCBsYSBwcsOpc2VudGF0aW9uLiAgDQoNCi0gw4AgbGEgYmFzZSwgdW5lIGZhY2V0dGUgY29ycmVzcG9uZCDDoCBsYSBsaXN0ZSBkZXMgdmFsZXVycyBwb3NzaWJsZXMgZCd1bmUgdmFyaWFibGUgIChldCBkZSBsZXVyIG9jY3VycmVuY2UpIHByw6lzZW50w6llIHNlbG9uIGxlIGZvcm1hdCAoY2hhaW5lLCBudW3DqXJpcXVlLCBkYXRlKS4gIA0KDQotIFBlcm1ldHRlbnQgdW5lIGV4cGxvcmF0aW9uIGV0IG1hbmlwdWxhdGlvbiBkZXMgdmFsZXVycyBwb3NzaWJsZXMgZXQgZGUgbGV1cnMgY2FzIGNvcnJlc3BvbmRhbnRzIHBsdXMgw6lsYWJvcsOpZXMgcXVlIGxlcyBmaWx0cmVzLiAgDQoNCi0gT24gcGV1dCBhaW5zaSBpZGVudGlmaWVyIGxlcyB0ZW5kYW5jZXMsIGxlcyByw6lndWxhcml0w6lzLCBsZXMgZXJyZXVycywgbGVzIMOpY2FydHMsIGxlcyByw6lww6l0aXRpb25zIGV0ICBjaWJsZXIgbGVzIHZhbGV1cnMgZGUgc291cy1ncm91cGVzIHByw6ljaXMuICANCg0KLSBDZXMgc291cy1ncm91cGVzIHBldXZlbnQgZW5zdWl0ZSDDqnRyZSDDqWRpdMOpcyBldCBleHBvcnTDqXMgKGJvdXRvbiBgRXhwb3J0ZXJgIGVuIGhhdXQgw6AgZHJvaXRlKS4gDQoNCjwvYnI+DQoNCiMjIyBEZXV4IHR5cGVzIGRlIGZhY2V0dGVzOg0KDQogIC0gTGVzIGZhY2V0dGVzIGF1dG9tYXRpc8OpZXMgKipbMV0qKi4gICANCiAgPC9icj4NCiAgLSBMZXMgZmFjZXR0ZXMgcGVyc29ubmFsaXPDqWVzICoqWzJdKiouICANCiAgPC9icj4NCiAgICAtIElsIGVzdCBhdXNzaSBwb3NzaWJsZSBkZSBjcsOpZXIgc2VzIHByb3ByZXMgZmFjZXR0ZXMgZ3LDomNlIGF1IGxhbmdhZ2UgR1JFTCBwb3VyIGTDqWZpbmlyIGRlcyBjb25kaXRpb25zIGRlIHPDqWxlY3Rpb24vZmlsdHJlIHRyw6hzIHByw6ljaXNlcyAqKlszXSoqIChvbiBwYXJsZSBlbmNvcmUgaWNpIGRlICpmYWNldHRlcyBwZXJzb25uYWxpc8OpZXMqLCBtYWlzIGVsbGVzIGRvaXZlbnQgw6p0cmUgcsOpZGlnw6llcyBtYW51ZWxsZW1lbnQpLg0KDQo8L2JyPg0KDQo8Y2VudGVyPiAgDQoNCiFbXShpbWFnZXMvT1IyMy5qcGcpDQoNCjwvY2VudGVyPiAgDQogICAgLSAqKls4XSoqIExlIGxpZW4gYGNoYW5nZXJgIHBlcm1ldCBkJ291dnJpciB1bmUgZmVuw6p0cmUgZCfDqWRpdGlvbiBHUkVMIHBvdXIgbW9kaWZpZXIgbGEgc3ludGF4ZSBkZSBsYSBmYWNldHRlLiAgDQogICAgLSAqKls5XSoqIFBvdXIgc3VwcHJpbWVyIGxlcyBmYWNldHRlcywgY2xpcXVlciBzdXIgbGUgeCBkZSBjaGFxdWUgZmVuw6p0cmUgb3UgYFRvdXQgc3VwcHJpbWVyYC4gIA0KICAgIC0gUG91ciBjb25zZXJ2ZXIgbGVzIGZlbsOqdHJlcyBtYWlzIHN1cHByaW1lciBsZXMgc8OpbGVjdGlvbnMgcXVpIHkgb250IMOpdMOpIGZhaXRlcywgY2xpcXVlciBzdXIgYHLDqWludGlhbGlzZXJgIHN1ciBjaGFxdWUgZmVuw6p0cmUgb3UgYFRvdXQgcsOpaW5pdGlhbGlzZXJgICoqWzldKiouICANCiAgICAtICoqWzEwXSoqIE9wdGlvbiBgR3JvdXBlYDogT3V0aWxzIHByb3Bvc2FudCBkaWZmw6lyZW50cyBhbGdvcml0aG1lcyBkZSBzaW1pbGFyaXTDqSBwZXJtZXR0YW50IGRlIHJlZ3JvdXBlciBkZXMgY2F0w6lnb3JpZXMgc2VtYmxhYmxlcy4gIA0KDQoNCiMjIyBUcm9pcyBmb3JtYXRzIGRlIGZhY2V0dGVzOg0KDQpPbiByZXRyb3V2ZSDDqWdhbGVtZW50IGRpZmbDqXJlbnRzICoqZm9ybWF0cyBkZSBmYWNldHRlcyoqIC0+IHVuZSBwb3VyIGNoYXF1ZSBmb3JtYXQgZGUgZG9ubsOpZXMgKExlcyBmYWNldHRlcyBwZXJzb25uYWxpc8OpZXMgcHJvcG9zZW50IGF1c3NpIGRlcyBmYWNldHRlcyBib29sw6llbm5lcykuICAgDQoNCg0KIyMjIyAxLiBGYWNldHRlIHRleHR1ZWxsZSAqKls0LTVdKiogDQoNCi0gVHlwZSBkZSBmYWNldHRlIGxlIHBsdXMgc291dmVudCB1dGlsaXPDqS4gICANCi0gUmVncm91cGVudCBkYW5zIGxhIGZlbsOqdHJlIGRlIGdhdWNoZSBsZXMgdmFsZXVycyBkaXN0aW5jdGVzICh0ZXh0dWVsbGVzIG91IG51bcOpcmlxdWVzKSBkZXMgY29sb25uZXMgdm91bHVlcy4gICANCiAgLSBPbiBwZXV0IGZhaXJlIHVuZSBmYWNldHRlIHRleHR1ZWxsZSBzdXIgdW5lIGNvbG9ubmUgbnVtw6lyaXF1ZSBtYWlzIHBhcyBsJ2ludmVyc2UuICANCiAgLSAyMDAwIHZhbGV1cnMgbWF4aW11bSBwYXIgZMOpZmF1dCBtYWlzIHBldXQgw6p0cmUgbW9kaWZpw6kgZGFucyBsZXMgcHLDqWbDqXJlbmNlcy4gU2kgbGVzIHZhbGV1cnMgc29udCB0cm9wIG5vbWJyZXVzZXMsIGVsbGVzIG5lIHNlcm9udCBwYXMgbGlzdMOpZXMgKHVuIGZpbHRyZSBwb3VycmFpdCDDqnRyZSB1dGlsaXPDqSkuIA0KLSBQZXJtZXR0ZW50IGRlIGNvbWJpbmVyIGRpZmbDqXJlbnRzIGZpbHRyZXMgZW4gc8OpbGVjdGlvbm5hbnQgZGlmZsOpcmVudGVzIHZhbGV1cnMgZCd1bmUgb3UgcGx1c2lldXJzIHZhcmlhYmxlcyAoZXQgbGV1cnMgY2FzIGNvcnJlc3BvbmRhbnRzKS4gICANCiAgLSBDbGlxdWVyIGBpbmNsdXJlYCBvdSBgZXhjbHVyZWAgcG91ciBzw6lsZWN0aW9ubmVyIG91IHN1cHByaW1lciBkZXMgY2hvaXggbXVsdGlwbGVzICoqWzEyXSoqLiAgIA0KICAtIFVuZSBmb2lzIGxhIHPDqWxlY3Rpb24gZmFpdGUsIGwnb3B0aW9uIGBpbnZlcnNlcmAgcGVybWV0IGRlIHPDqWxlY3Rpb25uZXIgdG91dCBTQVVGIGxhIHPDqWxlY3Rpb24gKipbMTFdKiouICAgDQogIC0gUGV1dmVudCDDqnRyZSB0cmnDqWVzIHNlbG9uIGxlIG5vbSBvdSBsZSBjb21wdGUgKG5vbWJyZSBkJ29jY3VycmVuY2VzKS4gICANCi0gUGVybWV0dGVudCAqKmTigJnDqWRpdGVyIGxlcyB2YWxldXJzKiogKGNvbnRlbnUgZGUgY2hhcXVlIGNlbGx1bGUgY29ycmVzcG9uZGFudGUpICoqWzEzXSoqLiAgDQoNCg0KIyMjIyAyLiBGYWNldHRlIG51bcOpcmlxdWUgKipbN10qKg0KDQotIFZpc3VhbGlzZXIgZXQgc8OpbGVjdGlvbm5lciBsZXMgdmFsZXVycyBk4oCZdW5lIHZhcmlhYmxlIG51bcOpcmlxdWUgYWxsYW50IGRlIGxhIHBsdXMgcGV0aXRlIMOgIGxhIHBsdXMgZ3JhbmRlLiAgDQoNCg0KIyMjIyAzLiBGYWNldHRlIGNocm9ub2xvZ2lxdWUgKipbNl0qKg0KDQotIFZpc3VhbGlzZXIgZXQgc8OpbGVjdGlvbm5lciBsZXMgdmFsZXVycyBk4oCZdW5lIGNvbG9ubmUgZGF0ZSBlbiBsaWduZSBkdSB0ZW1wcy4gIA0KDQoNCjwvYnI+DQoNCiMjIEV4ZXJjaWNlDQoNCjxkaXYgY2xhc3MgPSAiYm94MSI+DQoNCioqRmlsdHJlcioqIA0KDQotIEV4cGxvcmVyIGxlcyB2YWxldXJzIGRlIGxhIHZhcmlhYmxlICpDYXVzZSBwcmltYWlyZSouIFF1ZWxsZSBlc3QgbGEgZGV1eGnDqG1lIHBsdXMgZnLDqXF1ZW50ZT8gDQotIFF1ZWxsZXMgc29udCBsZXMgY2F0w6lnb3JpZXMgZGUgKkNhdXNlIHNlY29uZGFpcmUqIHJlbGnDqWVzIMOgIGxhICpDYXVzZSBwcmltYWlyZSAiQ2xpZW50w6hsZSIqPyAgIA0KLSBRdWVsbGUgZXN0IGxhIHBsdXMgZnLDqXF1ZW50ZT8gU8OpbGVjdGlvbm5lciBjZXR0ZSB2YWxldXIuIENvbWJpZW4gZGUgY2FzIGNvcnJlc3BvbmRlbnQgw6AgY2V0dGUgc8OpbGVjdGlvbj8gIA0KLSDDgCBxdWVsICpqb3VyIGRlIGxhIHNlbWFpbmUqIGNldHRlIGNhdXNlIGVzdC1lbGxlIHN1cnZlbnVlIGxlIHBsdXMgc291dmVudD9eW0NsaWVudMOobGUgLyBCbGVzc8OpZSBvdSBtYWxhZGUsIE3DqWZhaXQgdm9sb250YWlyZSwgTnVpc2FuY2UgaW52b2xvbnRhaXJlIC8gTcOpZmFpdCB2b2xvbnRhaXJlIDc4MS8gNV0gICANCi0gUsOpaW5pdGlhbGlzZXIgdG91dGVzIGxlcyBmYWNldHRlcy4NCg0KLSBFeHBsb3JlciBsZXMgZmFjZXR0ZXMgcGVyc29ubmFsaXPDqWVzICpQYXIgbW90KiBldCAqZG91YmxvbnMqIHN1ciBsYSBjb2xvbm5lICpDYXVzZSBwcmltYWlyZSouDQoNCioqw4lkaXRlcioqICANCg0KLSBEYW5zIGxhIGZhY2V0dGUgKkNhdXNlIHByaW1haXJlKiwgcmVub21tZXIgbGEgdmFsZXVyICJhdXRyZSIgcG91ciBxdSdlbGxlIHNvaXQgZnVzaW9ubsOpZSDDoCBsYSB2YWxldXIgIkF1dHJlcyIuICANCi0gU3VwcHJpbWVyIHRvdXRlcyBsZXMgZmFjZXR0ZXMuDQo8L2Rpdj4NCg0KPC9icj4NCg0KDQo8ZGl2IGNsYXNzID0gImJveDEiPg0KKipGaWx0cmVyKiogDQoNCi0gUXVlbCBlc3QgbGUgKnN5bXB0b21lKiBsZSBwbHVzIGZyw6lxdWVudD8gU8OpbGVjdGlvbm5lciBjZXR0ZSB2YWxldXIuICANCi0gU3VyIHF1ZWxsZSAqTGlnbmUqIGNlICpzeW1wdG9tZSogcydlc3QgcHJvZHVpdCBsZSBwbHVzIHNvdXZlbnQ/IFPDqWxlY3Rpb25uZXIgY2V0dGUgdmFsZXVyLiAgDQotIENlcyDDqXbDqW5lbWVudHMgb250LWlscyBuw6ljZXNzaXTDqSB1bmUgKsOpdmFjdWF0aW9uKj9eW0NsaWVudMOobGUgLyBMaWduZSBvcmFuZ2UgLyBPdWkgMTddICAgICANCg0KKirDiWRpdGVyKiogIA0KLSDDiWRpdGVyIGxhIHZhcmlhYmxlICrDqXZhY3VhdGlvbiogZGUgZmHDp29uIMOgIGNlIHF1J2lsIG4neSBhaXQgcXVlICoqZGV1eCB2YWxldXJzKiogcG9zc2libGVzOiBPdWkgZXQgTm9uLiAgDQo8L2Rpdj4NCg0KKioqDQoNCg0KIyMgNy4yLiBMZXMgcmVncm91cGVtZW50cyAoY2x1c3RlcmluZykNCg0KLSBGb25jdGlvbiBxdWkgcGVybWV0IGQnaWRlbnRpZmllciBkYW5zIHVuZSBjb2xvbm5lIGxlcyB2YWxldXJzIGRpc3RpbmN0ZXMgcXVpIHBvdXJyYWllbnQgYXZvaXIgbGEgbcOqbWUgc2lnbmlmaWNhdGlvbiBvdSBxdWkgcG91cnJhaWVudCDDqnRyZSByZWdyb3Vww6llcyBkYW5zIHVuZSBtw6ptZSBjYXTDqWdvcmllID0gInZhcmlhdGlvbnMgc3VyIGxlIG3Dqm1lIHRow6htZSIgw6l2YWx1w6llcyBlbiBmb25jdGlvbiBkZSBbZGlmZsOpcmVudHMgYWxnb3JpdGhtZXNdKGh0dHBzOi8vZ2l0aHViLmNvbS9PcGVuUmVmaW5lL09wZW5SZWZpbmUvd2lraS9DbHVzdGVyaW5nLUluLURlcHRoKS4gDQoNCi0gQ2hhcXVlIHN1Z2dlc3Rpb24gZG9pdCDDqnRyZSBhcHByb3V2w6llIGluZGl2aWR1ZWxsZW1lbnQgcG91ciBxdWUgbGVzIG1vZGlmaWNhdGlvbnMgcydhcHBsaXF1ZW50IChsZXMgcmVncm91cGVtZW50cyBwcm9wb3PDqXMgbmUgc29udCBwYXMgbsOpY2Vzc2FpcmVtZW50IHBlcnRpbmVudHMpLg0KDQotIE9wZW5SZWZpbmUgcHJvcG9zZSBkZXMgKmNsdXN0ZXJzKiBzZWxvbiBkaWZmw6lyZW50ZXMgbcOpdGhvZGVzIHBsdXMgb3UgbW9pbnMgw6lsYWJvcsOpZXMgKCpQcm9jaGUgdm9pc2luKiBwcmVuZCBwbHVzIGRlIG3DqW1vaXJlKSBxdWkgcGVybWV0dGVudCBkZSByZWdyb3VwZXIgbGVzIHZhbGV1cnMgc2ltaWxhaXJlcyBldCBwcm9wb3NlbnQgZGVzIG1hdGNocyBwb3NzaWJsZXMgKCpmdXp6eSBtYXRjaGluZyopOiBwYXIgZXhlbXBsZSAqZW1wcmVpbnRlKiBlc3QgcGx1cyBjb25zZXJ2YXRldXIgKGRpc3Rpbmd1ZSBjYXNzZSwgZXNwYWNlcywgb3JkcmUsIHLDqXDDqXRpdGlvbiwgcG9uY3R1YXRpb24uLi4pLCAqbmdyYW0qIGVzdCBwbHVzIGZsZXhpYmxlIChtw6ptZXMgY2FyYWN0w6hyZXMpLCAqTWV0YXBob25lMyogZXN0IGxlIHBsdXMgImxpYsOpcmFsIiAobcOqbWUgcHJvbm9uY2lhdGlvbikuDQoNCiMjIEV4ZXJjaWNlDQoNCjxkaXYgY2xhc3MgPSAiYm94MSI+DQotIENyw6llciB1bmUgZmFjZXR0ZSB0ZXh0dWVsbGUgc3VyIGxhIGNvbG9ubmUgKkNvZGUgZGUgbGlldSouICANCi0gQ2xpcXVlciBzdXIgYEdyb3VwZWAgZXQgZXhwbG9yZXIgbGVzIHJlZ3JvdXBlbWVudHMgZW4gZm9uY3Rpb24gZGVzIGRpZmbDqXJlbnRzIGFsZ29yaXRobWVzLiAgDQo8L2Rpdj4NCg0KKioqDQoNCg0KIyMgNy4zLiBMZXMgZmFjZXR0ZXMgcGVyc29ubmFsaXPDqWVzIA0KDQoNCi0gRm9uY3Rpb25uZW50IGNvbW1lIGRlcyBmYWNldHRlcyBhdXRvbWF0aXPDqWVzIHNhdWYgcXUnb24gbmUgcGV1dCDDqWRpdGVyIGVuIGZvbmN0aW9uIGRlIGNlcyByw6lzdWx0YXRzIGNhciBlbGxlcyBwcsOpc2VudGVudCBkZXMgZG9ubsOpZXMgbW9kaWZpw6llcyBlbiBtw6ltb2lyZS4NCg0KLSBPbnQgw6l0w6kgZMOpdmVsb3Bww6llcyBldCBhdXRvbWF0aXPDqWVzIGFmaW4gZCdleHBsb3JlciBkZXMgYXNwZWN0cyBwcsOpY2lzIGRlcyBkb25uw6llcyBzYW5zIGF2b2lyIMOgIGxlcyAgcsOpZGlnZXIgZW4gc3ludGF4ZSBHUkVMOiANCg0KICAtIGBGYWNldHRlIHBhciBtb3RgIDogRGl2aXNlIGNoYXF1ZSBtb3QgKHPDqXBhcsOpIGQndW4gZXNwYWNlKSBkJ3VuZSBjb2xvbm5lIGV0IGxlcyBwcsOpc2VudGUgZW4gbGlzdGUgZGUgdmFsZXVycyBkaXN0aW5jdGVzIFt2YWx1ZS5zcGxpdCgiICIpXS4NCiAgDQogIC0gYEZhY2V0dGUgZG91YmxvbnNgOiB2YWxldXJzIGJvb2zDqWVubmVzIGluZGlxdWFudCBzaSBsZXMgdmFsZXVycyBzb250IHVuaXF1ZXMgKGZhbHNlKSBvdSBub24gKHRydWUpIFtmYWNldENvdW50KHZhbHVlLCAndmFsdWUnLCAnU3ltcHRvbWUnKSA+IDFdLiAgDQogIA0KICAtIGBGYWNldHRlcyBsb2dhcml0aG1pcXVlc2A6IG1vZGlmaWNhdGlvbiBsb2dhcml0aG1pcXVlIGRlIHZhbGV1cnMgbnVtw6lyaXF1ZXMgW3ZhbHVlLmxvZygpXS4NCiAgDQogIC0gYEZhY2V0dGUgbG9uZ3VldXIgZGUgdGV4dGVgOiBsaXN0ZSBsZSBub21icmUgZGUgY2FyYWN0w6hyZXMgZHUgY29udGVudSBkZXMgY2VsbHVsZXMgZCd1bmUgY29sb25uZSBbdmFsdWUubGVuZ3RoKCldLg0KICANCiAgLSBGYWNldHRlcyBwZXJtZXR0YW50IGQnZXhwbG9yZXIgbGVzIHZhbGV1cnMgZCdgZXJyZXVyYCwgYG51bGxlc2AsIGB2aWRlc2AuLi4gW2lzRW1wdHlTdHJpbmcodmFsdWUpXQ0KDQoqKiogDQoNCiMgOC4gIFRyYW5zZm9ybWF0aW9ucw0KDQotIE9wZW5SZWZpbmUgcGVybWV0IGQnZXhwbG9yZXIgbWFpcyBhdXNzaSBkZSBtb2RpZmllciBzZXMgZG9ubsOpZXMgc2FucyBhdm9pciDDoCB0b3VjaGVyIGF1IGNvbnRlbnUgZGUgY2VsbHVsZXMgbWFudWVsbGVtZW50LiAgDQoNCi0gQ29tbWUgcG91ciBsZXMgZmFjZXR0ZXMsIGxlcyBmb25jdGlvbnMgZGUgdHJhbnNmb3JtYXRpb24gcGV1dmVudCBzZSBmYWlyZSBkZSBkZXV4IGZhw6dvbnM6ICAgIA0KDQogIDEuIFRyYW5zZm9ybWF0aW9ucyBhdXRvbWF0aXPDqWVzIChgVHJhbnNmb3JtYXRpb25zIGNvdXJhbnRlc2ApICoqWzJdKio6IGZvbmN0aW9ucyBwZXJtZXR0YW50IGQnYXBwbGlxdWVyIGRlcyBtb2RpZmljYXRpb25zIGNvdXJhbnRlcyBzdXIgbGUgZm9ybWF0IGV0IGxhIHN0cnVjdHVyZSBkZXMgY2VsbHVsZXMvY29sb25uZXMuICANCiAgDQogIDIuIFRyYW5zZm9ybWF0aW9ucyBtYW51ZWxsZXMgZGFucyBsYSBmZW7DqnRyZSBHUkVMICoqWzFdKiogYWZpbiBkJ2FsbGVyIGJlYXVjb3VwIHBsdXMgbG9pbi4gIA0KICANCg0KIVtdKGltYWdlcy9PUjI0LmpwZykNCg0KPC9icj4NCg0KPGRpdiBjbGFzcyA9ICJub3RlIj4NClBvdXIgdm9pciBsYSBzeW50YXhlIGNvcnJlc3BvbmRhbnQgw6AgY2hhcXVlIGZvbmN0aW9uIGRlIGB0cmFuc2Zvcm1hdGlvbnMgY291cmFudGVzYCwgYXBwbGlxdWVyIGxhIGZvbmN0aW9uIHN1ciB1bmUgY29sb25uZSBwdWlzIGFsbGVyIHZvaXIgbCdoaXN0b3JpcXVlLiBQYXIgZXhlbXBsZTogYHZhbHVlLnRvTnVtYmVyKClgLCBgdmFsdWUudG9UaXRsZWNhc2UoKWAsIGB2YWx1ZS50b051bWJlcigpYCwgYHZhbHVlLnRvVXBwZXJjYXNlKClgLCBgdmFsdWUudHJpbSgpYC4uLiA8L2Rpdj4NCg0KKioqIA0KDQoNCiMjIDguMS4gRGl2aXNlciBsZSBjb250ZW51IGRlIGNlbGx1bGVzIG11bHRpdmFyacOpZXMNCg0KLSAqKkRldXggb3B0aW9uczogKiogIA0KICAxLiBFbiBkaXZpc2FudCBsZSBjb250ZW51IGRlcyBjZWxsdWxlcyBlbiAqKnBsdXNpZXVycyBjb2xvbm5lcyoqOiBgw4lkaXRlciBsYSBjb2xvbm5lIC0+IERpdmlzZXIgZW4gcGx1c2lldXJzIGNvbG9ubmVzYCAgDQogIDIuIEVuIGRpdmlzYW50IGxlIGNvbnRlbnUgc3VyICoqcGx1c2lldXJzIGxpZ25lcyoqOiBgw4lkaXRlciBsZXMgY2VsbHVsZXMgLT4gRGl2aXNlciBsZXMgY2VsbHVsZXMgbXVsdGl2YXJpw6llc2AgIA0KDQo8L2JyPg0KDQohW10oaW1hZ2VzL09SMzcuanBnKSAgDQoNCi0gTGEgcHJlbWnDqHJlIG9wdGlvbiBlc3QgbGEgcGx1cyBmcsOpcXVlbnRlLiANCi0gTGEgZGV1eGnDqG1lIG9wdGlvbiBhdXJhIHVuIGVmZmV0IGltcG9ydGFudCBzdXIgbGEgc3RydWN0dXJlIGRlcyBvYnNlcnZhdGlvbnMgcHVpc3F1J2VsbGUgbXVsdGlwbGllcmEgbGUgbm9tYnJlIGRlIGxpZ25lcyBwYXIgY2FzIChjZSBxdWkgbsOpY2Vzc2l0ZXJhIGRlIHBhc3NlciDDoCBsYSB2dWUgcGFyIGBlbnRyw6llc2ApLg0KDQojIyBFeGVyY2ljZQ0KDQo8ZGl2IGNsYXNzID0gImJveDIiPg0KVHJhbnNmb3JtZXIgbGEgdmFyaWFibGUgKkxpZ25lKg0KPC9kaXY+DQo8ZGl2IGNsYXNzID0gImJveDEiPg0KKipVbmlmb3JtaXNlciBsZSBub20gZGVzIGxpZ25lczoqKiAgDQoNCi0gQ3LDqWVyIHVuZSBmYWNldHRlIHN1ciBsYSBjb2xvbm5lIExpZ25lLiANCg0KLSBEZXV4IHByb2Jsw6htZXMgc2UgcG9zZW50OiAxKSBsZXMgbm9tcyBkZSBsaWduZXMgbm9uIHVuaWZvcm1lcyBldCAyKSBsZXMgdmFsZXVycyBtdWx0aXBsZXMuICANCg0KLSBOb3VzIGNob2lzaXNzb25zIGQndW5pZm9ybWlzZXIgbGVzIHZhbGV1cnMgZW4gdXRpbGlzYW50IGxlcyBudW3DqXJvcyBkZSBsaWduZXMgZXQgZW4gc3VwcHJpbWFudCBsZSBtb3QgTGlnbmUuICANCg0KLSBFeHBsb3JlciBldCBhY2NlcHRlciBsZXMgcmVncm91cGVtZW50cyBwcm9wb3PDqXMgYXZlYyBsYSBmb25jdGlvbiBgR3JvdXBlYC4gIA0KDQotIFN1cHByaW1lciBsZSBtb3QgbGlnbmU6ICANCg0KICAtIGDDiWRpdGVyIGxlcyBjZWxsdWxlcyAtPiByZW1wbGFjZXJgIC0+ICJMaWduZSIgcGFyOiBuZSByaWVuIHNhaXNpciBkYW5zIGwnZW5jYWRyw6kuICAgIA0KDQoNCi0gQ2xpcXVlciBlbnN1aXRlIGRpcmVjdGVtZW50IHN1ciBgZWRpdGAgc3VyIHVuZSBjZWxsdWxlIGRlIGxhIGNvbG9ubmUgZGUgKkxpZ25lKiAtPiByZW1hcnF1ZXIgbGEgcHLDqXNlbmNlIGQndW4gZXNwYWNlLCBzdXBwcmltZXIgbCdlc3BhY2UgZXQgZmVybWVyLiANCg0KLSBSYWZyYWljaGlyIGxhIGZhY2V0dGUgZXQgb2JzZXJ2ZXIgbCdpbXBhY3QuIA0KDQotIFJlbWFycXVlciBsJ2ltcGFjdCBkZSBsJ2VzcGFjZSBkYW5zIGxhIGZhY2V0dGUuIENlcyBlc3BhY2VzIHBldXZlbnQgw6p0cmUgc3VwcHJpbcOpcyBncsOiY2Ugw6AgbGEgZm9uY3Rpb246IGDDiWRpdGVyIGxlcyBjZWxsdWxlcyAtPiBUcmFuc2Zvcm1hdGlvbnMgY291cmFudGVzIC0+IFN1cHByaW1lciBsZXMgZXNwYWNlcyBkZSBkw6lidXQgZXQgZGUgZmluYC4gICANCi0gUmVtcGxhY2VyIGxlcyBjb3VsZXVycyBkZSBsaWduZSBwYXIgbGV1ciBudW3DqXJvIGRpcmVjdGVtZW50IGRhbnMgbGEgZmFjZXR0ZS4gICANCjwvZGl2Pg0KDQoNCg0KPGRpdiBjbGFzcyA9ICJib3gxIj4NCioqRGl2aXNlciBsZSBjb250ZW51IGRlcyBjZWxsdWxlcyBlbiBjcsOpYW50IGRlcyBjb2xvbm5lcyBhdmVjIHVuZSBzZXVsZSB2YWxldXIgICoqDQoNCi0gRGFucyBsYSBmYWNldHRlLCByZW1wbGFjZXIgbGVzICItIiBwYXIgZGVzICIsIi4gICAgDQoNCi0gYMOJZGl0ZXIgbGEgY29sb25uZSAtPiBEaXZpc2VyIGVuIHBsdXNpZXVycyBjb2xvbm5lc2A6DQogIC0gRMOpZmluaXIgbGUgc8OpcGFyYXRldXIgIiwiIChjZWx1aS1jaSBkaXNwYXJhaXRyYSkuICANCiAgLSBEw6ljb2NoZXIgbGVzIG9wdGlvbnMgIkRldmluZXIiIGV0ICJTdXBwcmltZXIiLiAgDQotIExlcyBub3V2ZWxsZXMgY29sb25uZXMgcmVwcmVuZHJvbnQgbGUgbm9tIGRlIGwnb3JpZ2luYWwgbnVtw6lyb3TDqS4gTGVzIHJlbm9tbWVyOiBwcmVtaWVyZSwgZGV1eGllbWUsIHRyb2lzaWVtZSwgcXVhdHJpZW1lLiAgDQo8L2Rpdj4NCg0KPC9icj4NCg0KPGRpdiBjbGFzcyA9ICJib3gyIj4NCkRpdmlzZXIgcGFyIGxlcyBsb25ndWV1cnMgZGUgY2hhbXBzIGxhIGNvbG9ubmUgYE51bcOpcm8gZCdpbmNpZGVudGAgcG91ciBlbiBjcsOpZXIgZGV1eCBub3V2ZWxsZXM6ICANCiAgMS4gVW5lIGNvbG9ubmUgY29udGVuYW50IGxlIHByZW1pZXIgY2FyYWN0w6hyZSBpbmRpcXVhbnQgbGUgdHlwZSBkJ2luY2lkZW50LCBzb2l0IFQgKHRyYWluKSBvdSBTIChzZXJ2aWNlKS4gIA0KICAyLiBVbmUgY29sb25uZSBjb250ZW5hbnQgbCdlbnNlbWJsZSBkZXMgY2FyYWN0w6hyZXMgbnVtw6lyaXF1ZXMgaW5kaXF1YW50IGxlIG51bcOpcm8gZCdpbmNpZGVudC4gIA0KPC9kaXY+DQo8ZGl2IGNsYXNzID0gImJveDEiPg0KKipWw6lyaWZpY2F0aW9ucyBwcsOpYWxhYmxlczoqKg0KICAxLiBWw6lyaWZpZXIgcXUnaWwgbid5IGEgcGFzIGRlIGRvdWJsb24gZGFucyBjZXR0ZSBjb2xvbm5lOiBgRmFjZXR0ZXMgcGVyc29ubmFsaXPDqWVzIC0+IEZhY2V0dGUgZG91YmxvbmAgLT4gUXVlbCBlc3QgbGUgcHJvYmzDqG1lPyAgQ2xpcXVlciBzdXIgYENoYW5nZXJgIGV0IGFuYWx5c2VyIGwnZXhwcmVzc2lvbi4gIA0KICAyLiBWw6lyaWZpZXIgbGEgbG9uZ3VldXIgZGUgY2hhcXVlIGNhczogIGBGYWNldHRlcyBwZXJzb25uYWxpc8OpZXMgLT4gRmFjZXR0ZSBsb25ndWV1ciBkdSB0ZXh0ZWAuICAgIA0KDQoqKkRpdmlzZXIgbGEgY29sb25uZToqKiAgDQotIGDDiWRpdGVyIGxhIGNvbG9ubmUgLT4gRGl2aXNlciBlbiBwbHVzaWV1cnMgY29sb25uZXMgc2Vsb24gbGVzIGxvbmd1ZXVycyBkZSBjaGFtcHNgIDogMSwgOC4gICAgDQotIETDqWNvY2hlciA6IGRldmluZXIgbGUgdHlwZSBkZSBjZWxsdWxlIGV0IFN1cHByaW1lciBjZXR0ZSBjb2xvbm5lLiAgICANCi0gUmVub21tZXIgbGVzIGNvbG9ubmVzIDogVHlwZSBldCBJRC4gICAgDQo8L2Rpdj4NCg0KPC9icj4NCg0KKioqDQoNCiMjIDguMi4gRnVzaW9ubmVyIGxlIGNvbnRlbnUgZGUgcGx1c2lldXJzIGNvbG9ubmVzDQoNCiMjIEV4ZXJjaWNlICAgDQoNCk5vdXMgc291aGFpdG9ucyBjYWxjdWxlciBsYSBkdXLDqWUgZGVzIGluY2lkZW50cyAobsOpY2Vzc2l0ZSBsJ3V0aWxpc2F0aW9uIGRlIEdSRUwpLiBQb3VyIGNlIGZhaXJlIG5vdXMgY3LDqWVyb25zIGRldXggY29sb25uZXM6ICANCi0gVHJhbnNmb3JtYXRpb24gc2ltcGxlIGF1dG9tYXRpc8OpZTogQ3LDqWVyIHVuZSBub3V2ZWxsZSBjb2xvbm5lIGZ1c2lvbm5hbnQgbGVzIGNvbG9ubmVzOiAqQW5uw6llIGNpdmlsZSosICpNb2lzIGNhbGVuZHJpZXIqLCAqam91cnMgZHUgbW9pcyogZXQgKkhldXJlIGRlIGwnaW5jaWRlbnQqLiAgDQotIFRyYW5zZm9ybWF0aW9uIGF2YW5jw6llIEdSRUwgKHBldXQgw6p0cmUgcsOpYWxpc8OpZSBkZSBmYcOnb24gYXV0b21hdGlzw6llKTogQ3LDqWVyIHVuZSBub3V2ZWxsZSBjb2xvbm5lIGZ1c2lvbm5hbnQgbGVzIGNvbG9ubmVzOiAqQW5uw6llIGNpdmlsZSosICpNb2lzIGNhbGVuZHJpZXIqLCAqam91cnMgZHUgbW9pcyogZXQgKkhldXJlIGRlIGwnaW5jaWRlbnQqLiAgDQoNCjwvYnI+DQoNCjxkaXYgY2xhc3MgPSAibm90ZSI+DQpMb3JzcXVlIGwnb24gZnVzaW9ubmUgZGVzIGNvbG9ubmVzLCBpbCBmYXV0IHBvcnRlciB1bmUgYXR0ZW50aW9uIHBhcnRpY3VsacOocmUgYXUgc8OpcGFyYXRldXIgY2hvaXNpLiBOZSBwYXMgdXRpbGlzZXIgdW4gY2FyYWN0w6hyZSBxdWkgcG91cnJhaXQgZmFpcmUgcGFydGllIGR1IGNvbnRlbnUgKGV4OiAsKSBvdSBxdWkgc2VydmlyYSDDoCBkaXZpc2VyIGxlcyBjb2xvbm5lcyAoLmNzdikNCjwvZGl2Pg0KDQo8L2JyPg0KDQoNCjxkaXYgY2xhc3MgPSAiYm94MiI+DQoxLiAqKkZvbmN0aW9uIGF1dG9tYXRpc8OpZSoqIC0+IEZ1c2lvbm5lciBsZXMgY29sb25uZXM6ICpBbm7DqWUgY2l2aWxlKiwgKk1vaXMgY2FsZW5kcmllciosICpqb3VycyBkdSBtb2lzKiBldCAqSGV1cmUgZGUgbCdpbmNpZGVudCoNCjwvZGl2Pg0KDQo8ZGl2IGNsYXNzID0gImJveDEiPg0KLSBBbm7DqWUgY2l2aWxlIC0+IGDDiWRpdGVyIGxhIGNvbG9ubmVgIC0+IGBKb2luZHJlIGxlcyBjb2xvbm5lc2AuICAgIA0KLSBKb2luZHJlIGRlcyBjb2xvbm5lcyAtPiBDb2NoZXIgbGVzIGNvbG9ubmVzIHZvdWx1ZXMgZXQgbGVzIHRyaWVyIHNlbG9uIGwnb3JkcmUgdm91bHUgZGFucyBsYSBub3V2ZWxsZSB2YWxldXIuICANCi0gU8OpcGFyYXRldXIgZW50cmUgbGUgY29udGVudSBkZSBjaGFxdWUgY29sb25uZTogIi0iLiAgICANCi0gw4ljcmlyZSBsZSByw6lzdWx0YXQgZGFucyB1bmUgbm91dmVsbGUgY29sb25uZSBub21tw6llOiAqRGF0ZSouICAgIA0KDQotIFRyYW5zZm9ybWVyIGVuIGZvcm1hdCBkYXRlOiBgw4lkaXRlciBsZXMgY2VsbHVsZXMgLT4gVHJhbnNmb3JtYXRpb25zIGNvdXJhbnRlcyAtPiBFbiBkYXRlYC4gICAgDQo8L2Rpdj4NCg0KPC9icj4NCg0KPGRpdiBjbGFzcyA9ICJib3gyIj4NCjIuICoqRmVuw6p0cmUgR1JFTCoqIC0+IEZ1c2lvbm5lciBsZXMgY29sb25uZXM6ICpBbm7DqWUgY2l2aWxlKiwgKk1vaXMgY2FsZW5kcmllciosICpqb3VycyBkdSBtb2lzKiBldCAqSGV1cmUgZGUgcmVwcmlzZSoNCjwvZGl2Pg0KDQo8ZGl2IGNsYXNzID0gImJveDEiPg0KLSBBbm7DqWUgY2l2aWxlIC0+IMOJZGl0ZXIgbGEgY29sb25uZSAtPiBBam91dGVyIHVuZSBjb2xvbm5lIGVuIGZvbmN0aW9uIGRlIGNldHRlIGNvbG9ubmU6ICANCg0KYGNlbGxzWyJBbm7DqWUgY2l2aWxlIl0udmFsdWUgKyAiLSIgKyAiMCIgKyBjZWxsc1siTW9pcyBjYWxlbmRyaWVyIl0udmFsdWUgKyAiLSIgKyAiMCIgKyBjZWxsc1siSm91ciBkdSBtb2lzIl0udmFsdWUgKyAiICIgKyAgY2VsbHNbIkhldXJlIGRlIGwnaW5jaWRlbnQiXS52YWx1ZWAuICANCg0KLSBWw6lyaWZpZXIgbGEgdHJhbnNmb3JtYXRpb24gYXZlYyB1bmUgZmFjZXR0ZSBgdmFsdWUudHlwZSgpYC4gIA0KDQotIFJlY29tbWVuY2VyIGxhIGpvaW50dXJlIHBvdXIgY3LDqWVyIHVuZSBjb2xvbm5lIGF2ZWMgbGEgZGF0ZS1oZXVyZSBkZSBmaW4gZGUgbCdpbmNpZGVudA0KYGNlbGxzWyJBbm7DqWUgY2l2aWxlIl0udmFsdWUgKyAiLSIgKyAiMCIgKyBjZWxsc1siTW9pcyBjYWxlbmRyaWVyIl0udmFsdWUgKyAiLSIgKyAiMCIgKyBjZWxsc1siSm91ciBkdSBtb2lzIl0udmFsdWUgKyAiICIgKyAgY2VsbHNbIkhldXJlIGRlIGwnaW5jaWRlbnQiXS52YWx1ZWAuICANCg0KLSBUcmFuc2Zvcm1lciBlbiBmb3JtYXQgZGF0ZTogYMOJZGl0ZXIgbGVzIGNlbGx1bGVzIC0+IFRyYW5zZm9ybWF0aW9ucyBjb3VyYW50ZXMgLT4gRW4gZGF0ZWAuICANCjwvZGl2Pg0KDQo8L2JyPg0KDQo8ZGl2IGNsYXNzID0gImJveDIiPg0KQ2FsY3VsZXIgbGEgZHVyw6llIGRlIGwnaW5jaWRlbnQgIA0KPC9kaXY+DQo8ZGl2IGNsYXNzID0gImJveDEiPg0KDQotIENyw6llciB1bmUgbm91dmVsbGUgY29sb25uZSB2aWRlOiAgDQpgw4lkaXRlciBsYSBjb2xvbm5lID4gQWpvdXRlciB1bmUgY29sb25uZSBlbiBmb25jdGlvbiBkZSBjZXR0ZSBjb2xvbm5lIGAgLT4gQ2hvaXNpciB1biBub3V2ZWF1IG5vbSBldCBsZSBjb250ZW51OiAiIi4gIA0KDQotIFBvdXIgY2FsY3VsZXIgdW5lIGRpZmbDqXJlbmNlIGVudHJlIGRhdGU6IGBkaWZmKGRhdGUxLCBkYXRlMiwgInJlc3VsdHMgZm9ybWF0IilgLiAgICANCg0KYGRpZmYoY2VsbHNbJ2RhdGUyJ10udmFsdWUsY2VsbHNbJ2RhdGUxJ10udmFsdWUsICdtaW51dGVzJylgLiAgIA0KPC9kaXY+DQoNCjwvYnI+DQoNCioqKg0KDQojIDkuIExlIGxhbmdhZ2UgR1JFTCANCg0KDQotICpHb29nbGUgUmVmaW5lIEV4cHJlc3Npb24gTGFuZ3VhZ2UqIA0KLSBMYW5nYWdlIHNpbWlsYWlyZSDDoCBqYXZhc2NyaXB0IGV0IGZvcm11bGVzIGV4Y2VsLiAgICANCi0gUGVybWV0IGxhIHLDqWRhY3Rpb24gZCdleHByZXNzaW9ucyB2aXNhbnQgw6AgbWFuaXB1bGVyL3RyYW5zZm9ybWVyIGxlIGNvbnRlbnUgZGVzIGNlbGx1bGVzIGQndW5lIGNvbG9ubmUuICANCihWb2lyIGxhIFtkb2N1bWVudGF0aW9uIG9mZmljaWVsbGVdKGh0dHBzOi8vZG9jcy5vcGVucmVmaW5lLm9yZy9tYW51YWwvZ3JlbCkgcG91ciBwbHVzIGRlIGTDqXRhaWxzKSAgDQotIExhbmdhZ2UgY29tcG9zw6kgZGUgW2ZvbmN0aW9uc10oaHR0cHM6Ly9kb2NzLm9wZW5yZWZpbmUub3JnL21hbnVhbC9ncmVsZnVuY3Rpb25zKSBldCBkJ1tvYmpldHNdKGh0dHBzOi8vZG9jcy5vcGVucmVmaW5lLm9yZy9tYW51YWwvZXhwcmVzc2lvbnMjdmFyaWFibGVzKS4NCg0KPC9icj4NCg0KIyMgIDkuMS4gR1JFTCAtIFByaW5jaXBlcyBkZSBiYXNlIA0KDQojIyMjIFV0aWxpc2UgdW5lIHN5bnRheGUgcGFydGljdWxpw6hyZSBwb3VyIGNpYmxlciBsZXMgb2JqZXRzICh2YXJpYWJsZXMpOiAgDQotIENvbnRlbnUgZGUgY29sb25uZSBhY3R1ZWxsZTogYHZhbHVlYC4gICAgIA0KLSBDb250ZW51IGQndW5lIGF1dHJlIGNvbG9ubmU6IGBjZWxsc1snbm9tLWNvbG9ubmUnXS52YWx1ZWAuICAgIA0KLSBDb250ZW51IHRleHR1ZWw6ICJndWlsbGVtZXQgc2ltcGxlIG91IGRvdWJsZSIuICAgIA0KDQo8L2JyPg0KDQojIyMjIERldXggZm9ybWF0cyBkZSBub3RhdGlvbjogIA0KLSBJbWJyaXF1w6llOiAodHJpbSh0b0xvd2VyY2FzZSh2YWx1ZSkpLiAgICANCi0gKipTw6lxdWVudGllbGxlKio6IHZhbHVlLnRvTG93ZXJjYXNlKCkudHJpbSgpIChwbHVzIGZhY2lsZSDDoCBsaXJlKS4gICAgDQoNCjwvYnI+DQoNCiMjIyMgRGlmZsOpcmVudHMgdHlwZXMgZGUgZm9uY3Rpb25zOiAgDQotIExlcyBmb25jdGlvbnMgZXQgbGV1ciBjb21wb3J0ZW1lbnQgZMOpcGVuZHJvbnQgZHUgdHlwZSBkZSBkb25uw6llcyBtYW5pcHVsw6llcy4gIA0KLSBbQ2VydGFpbmVzIGZvbmN0aW9uc10oaHR0cHM6Ly9kb2NzLm9wZW5yZWZpbmUub3JnL21hbnVhbC9ncmVsZnVuY3Rpb25zI3NsaWNlYS1uLWZyb20tbi10by1vcHRpb25hbCkgcGVybWV0dGVudCBkZSB0cmFuc2Zvcm1lciBsZSBjb250ZW51IGRlIGNlbGx1bGVzIGVuIGBhcnJheXNgIChsaXN0ZSBkJ8OpbMOpbWVudHMpIGV0IGRlIGxlcyBtYW5pcHVsZXIuICANCi0gW0NlcnRhaW5lcyBmb25jdGlvbnNdKGh0dHBzOi8vZG9jcy5vcGVucmVmaW5lLm9yZy9tYW51YWwvZXhwcmVzc2lvbnMjcmVndWxhci1leHByZXNzaW9ucykgcGVybWV0dGVudCBkJ3V0aWxpc2VyIGxlcyBbZXhwcmVzc2lvbnMgcsOpZ3VsacOocmVzXSgjZXhwcmVzc2lvbikuICANCg0KPC9icj4NCg0KIyMjIyBEaWZmw6lyZW50cyB0eXBlcyBkJ29ww6lyYXRldXJzOiAgDQpTZWxvbiBsZSBmb3JtYXQsIGRpZmbDqXJlbnRzIHR5cGVzIGQnKipvcMOpcmF0ZXVycyoqIHBldXZlbnQgw6p0cmUgdXRpbGlzw6lzIGVudHJlIGxlcyB2YWxldXJzOiAgDQoJLSBPcMOpcmF0ZXVycyBhcml0aG3DqXRpcXVlczogKywgLSwgKiwgLyAgDQoJLSBPcMOpcmF0ZXVycyBib29sw6llbnM6ID09LCA+LCA8ICANCiAgDQoqKlBhciBleGVtcGxlOioqDQoNCi0gTGUgIisiIGVudHJlIGRldXggY29udGVudXMgbnVtw6lyaXF1ZXMgPSBzb21tZQ0KDQohW10oaW1hZ2VzL09SMzAuanBnKQ0KDQotIExlICIrIiBhdmVjIHVuIGNvbnRlbnUgdGV4dHVlbCA9IGNvbmNhdMOpbmF0aW9uDQoNCiFbXShpbWFnZXMvT1IzMS5qcGcpDQoNCjwvYnI+DQoNCioqKiAgDQoNCiMjICA5LjIuIEdSRUwgLSBMJ2luZGV4YXRpb24sIGxhIHPDqWxlY3Rpb24gZXQgbGEgbWFuaXB1bGF0aW9uIGQnw6lsw6ltZW50czogIA0KDQotIENoYXF1ZSBjYXJhY3TDqHJlIGNvbXBvc2FudCBsYSB2YWxldXIgZCd1bmUgY2VsbHVsZSBlc3Qgb3Jkb25uw6kgZGFucyB1biBpbmRleCAqKsOgIHBhcnRpciBkZSAwKiogKDFlciDDqWzDqW1lbnQpLg0KLSBDaGFxdWUgw6lsw6ltZW50IGQndW4gKmFycmF5KiBlc3Qgb3Jkb25uw6kgZGFucyB1biBpbmRleCAqKsOgIHBhcnRpciBkZSAwKiogKDFlciDDqWzDqW1lbnQpIGV0IHBldXQgw6p0cmUgY2libMOpIGdyw6JjZSBhdXggYFsgXWAuICANCi0gTCdvcMOpcmF0ZXVyIGBbIF1gIHBlcm1ldCBkZSBjaWJsZXIvc8OpbGVjdGlvbm5lciBkZXMgY2hhaW5lcyBkZSBjYXJhY3TDqHJlcyBvdSBkZXMgc291cy3DqWzDqW1lbnRzIHNww6ljaWZpcXVlcy4gDQoNCjwvYnI+DQoNCiMjIyBFeGVtcGxlIC0gRm9uY3Rpb24gc3BsaXQoKSAgIA0KDQo+IGB2YWx1ZVswLDhdYCAtPiBNb250csOpYWwgKFF1w6liZWMpID0gPyAgIA0KPiBgdmFsdWUuc3BsaXQoIigiKVsxXWAgLT4gTW9udHLDqWFsIChRdcOpYmVjKSA9ID8gIA0KPiBgdmFsdWUuc3BsaXQoIigiKVsxXS5zcGxpdCgiKSIpWzBdYCAtPiBNb250csOpYWwgKFF1w6liZWMpID0gP15bTW9udHLDqWFsIC8gUXXDqWJlYykgLyBRdcOpYmVjXSAgDQoNCjwvYnI+DQoNCiMjIEV4ZXJjaWNlIC0gRm9uY3Rpb24gcmVwbGFjZSgpICANCg0KPGRpdiBjbGFzcyA9ICJib3gxIj4NCg0KYElTQk46IDk3OC0yLTEzLTA4MjkzMC0wYA0KDQpDb25zZXJ2ZXIgc2V1bGVtZW50IGxlIGNoaWZmcmUgZGUgbCdJU0JOIHNhbnMgbGVzIHRyYWl0cyBkJ3VuaW9uP15bdmFsdWVbNSwyNF0ucmVwbGFjZSgiLSIsICIiKV0NCg0KSW5kaWNlcyA6ICANCg0KLSBEZXV4IGZhw6dvbnMgZGUgZmFpcmU6IGB2YWx1ZWAgT1UgYHZhbHVlLnNwbGl0KClgDQotIGByZXBsYWNlKClgIChpbCBmYXV0IHJlbXBsYWNlciAicXVlbHF1ZSBjaG9zZSIsICJwYXIgbGUgdmlkZSIpDQoNCjwvZGl2Pg0KDQo8L2JyPg0KDQojIyMgRXhlbXBsZSAtIEZvbmN0aW9uIHNsaWNlKCkgIA0KDQpgTWFydGlub2xsaSwgUGFzY2FsOyBHYWJyaWVsbGksIE5pbm87IEZvcnRpZXIsIENhdGhlcmluZTsgQmVsbGVtYXJlLCBQYXNjYWxlYA0KDQohW10oaW1hZ2VzL09SMjUuanBnKQ0KDQrDiWRpdGVyIGxlcyBjZWxsdWxlcyAtPiBUcmFuc2Zvcm1lciAtPiBgdmFsdWUuc3BsaXQoIjsgIikuc2xpY2UoMSkuam9pbigiXG4iKWAgDQoNCiFbXShpbWFnZXMvT1IzOS5qcGcpDQoNCi0gYHNwbGl0KClgOiBkaXZpc2VyIGxhIGNlbGx1bGUgZW4gw6lsw6ltZW50cyBkaXN0aW5jdHMgc3VyIGxhIGJhc2UgZHUgc8OpcGFyYXRldXIgOw0KLSBgc2xpY2UoKWAgOiBjb25zZXJ2ZXIgbGVzIMOpbMOpbWVudHMgw6AgcGFydGlyIGRlIGwnw6lsw6ltZW50IDEgZG9uYyBzdXBwcmltZSBsZSAwLiANCi0gYGpvaW4oKWA6IGpvaW5kcmUgYXZlYyBsZSBzw6lwYXJhdGV1ciA7DQoNCjwvYnI+DQoNCiMjIEV4ZXJjaWNlIC0gRm9uY3Rpb24gc29ydCgpICANCg0KPGRpdiBjbGFzcyA9ICJib3gxIj4NCg0KTWV0dHJlIGxlcyBub21zIGVuIG9yZHJlIGFscGhhYsOpdGlxdWUgZXQgbGVzIGpvaW5kcmUgYXZlYyB1bmUgdmlyZ3VsZS5eW3ZhbHVlLnNwbGl0KCI7ICIpLnNvcnQoKS5qb2luKCIsICIpXQ0KDQpJbmRpY2VzOiAgDQoNCi0gYHNwbGl0KClgOiBkaXZpc2VyIGxhIGNlbGx1bGUgZW4gw6lsw6ltZW50cyBkaXN0aW5jdHMgc3VyIGxhIGJhc2UgZHUgc8OpcGFyYXRldXIgIA0KDQotIGBzb3J0KClgOiB0cmllciBsZXMgw6lsw6ltZW50cyAocmVzdGUgdmlkZSkNCg0KLSBgam9pbigpYDogam9pbmRyZSBhdmVjIGxlIHPDqXBhcmF0ZXVyICANCg0KDQo8L2Rpdj4NCg0KDQo8L2JyPg0KDQojIyMgRXhlbXBsZSAtIEZvbmN0aW9uIHJldmVyc2UoKSAgDQoNCsOJZGl0ZXIgbGVzIGNlbGx1bGVzIC0+IFRyYW5zZm9ybWVyIC0+IGB2YWx1ZS5zcGxpdCgiOyAiKVsxXS5zcGxpdCgiLCAiKS5yZXZlcnNlKCkuam9pbigiICIpICsgIiBlc3QgbGUgbWVpbGxldXIiYCANCg0KIVtdKGltYWdlcy9PUjM4LmpwZykNCg0KLSBgc3BsaXQoKWA6IGRpdmlzZSBsYSBjZWxsdWxlIGVuIMOpbMOpbWVudHMgZGlzdGluY3RzIHN1ciBsYSBiYXNlIGR1IHPDqXBhcmF0ZXVyIDsgZXQgcmV0aWVudCBsZSBkZXV4acOobWUgw6lsw6ltZW50DQotIGBzcGxpdCgpYDogZGl2aXNlIGNldCDDqWzDqW1lbnQgc3VyIGxlIHPDqXBhcmF0ZXVyICwNCi0gYHJldmVyc2UoKWA6IGludmVyc2UgbCdvcmRyZSBkZXMgZGV1eCDDqWzDqW1lbnRzDQotIGBqb2luKClgOiByYXR0YWNoZSBsZXMgZGV1eCDDqWzDqW1lbnRzIGRpdmlzw6kgYXZlYyB1biBlc3BhY2UNCg0KPC9icj4NCg0KKioqDQoNCiMjIDkuMy4gQ3LDqWVyIGRlcyBmYWNldHRlcyBhdmVjIEdSRUwNCg0KIyMgRXhlcmNpY2VzDQoNCjxkaXYgY2xhc3MgPSAiYm94MSI+DQoNCkNyw6llciB1bmUgZmFjZXR0ZSBwb3VyIGxpc3RlciBsZXMgY2FzIHNlbG9uIGwnKmhldXJlIGRlIGwnaW5jaWRlbnQqIHNldWxlbWVudCwgc2FucyBsZXMgbWludXRlcyAoMiBwcmVtaWVycyBjYXJhY3TDqHJlcykuIENvbW1lbnQgZmFpcmUgYWZmaWNoZXIgbGVzIG1pbnV0ZXMgc2V1bGVtZW50P15bdmFsdWVbMyw1XSBvdSB2YWx1ZS5zdWJzdHJpbmcoMyldIA0KDQpgdmFsdWVbMCwyXWAgICANCg0KPC9kaXY+DQoNCjwvYnI+DQoNCjxkaXYgY2xhc3MgPSAiYm94MSI+DQoNCkNyw6llciB1bmUgZmFjZXR0ZSBzdXIgbGEgY29sb25uZSAqQ29kZSBkZSBsaWV1KiBwb3VyIGlkZW50aWZpZXIgbGVzIGNhcyBkb250IGxhIHZhbGV1ciBjb21tZW5jZSBwYXIgIkPDtHRlIiAgDQoNCmB2YWx1ZS5zdGFydHNXaXRoKOKAnEPDtHRl4oCdKWAgICAgDQoNCjwvZGl2Pg0KDQo8L2JyPg0KDQo8ZGl2IGNsYXNzID0gImJveDEiPg0KDQpDcsOpZXIgdW5lIGZhY2V0dGUgcG91ciBpZGVudGlmaWVyIGxlcyBjYXMgZG9udCBsYSB2YWxldXIgZGFucyBsYSBjb2xvbm5lICpDYXVzZSBwcmltYWlyZSogZXN0IGxhIG3Dqm1lIHF1ZSBkYW5zIGxhIGNvbG9ubmUgKkNhdXNlIHNlY29uZGFpcmUqDQoNCmB2YWx1ZSA9PSBjZWxsc1siQ2F1c2Ugc2Vjb25kYWlyZSJdLnZhbHVlYCAgIA0KDQo8L2Rpdj4NCg0KPC9icj4NCg0KKioqDQoNCg0KIyMgOS40LiBSZWNoZXJjaGVyL3JlbXBsYWNlciB1biBjYXJhY3TDqHJlIGRhbnMgdG91dGVzIGxlcyBjb2xvbm5lcyBhdmVjIEdSRUwNCg0KIyMgRXhlcmNpY2UNCg0KPGRpdiBjbGFzcyA9ICJib3gyIj4NClJlbXBsYWNlciBsZXMgdmFsZXVycyAiIyIgZGFucyB0b3V0ZSBsYSBiYXNlIGRlIGRvbm7DqWVzIHBhciAiYXVjdW4iKiogICANCjwvZGl2Pg0KPGRpdiBjbGFzcyA9ICJib3gxIj4NCi0gUXVlbCBwcm9ibMOobWUgY2UgcmVtcGxhY2VtZW50IHBldXQtaWwgcHJvdm9xdWVyPyAgICANCi0gRXhwbG9yZXIgbCdpbXBhY3QgZGVzIHRyb2lzIGV4cHJlc3Npb25zIGRlIHJlbXBsYWNlbWVudCBzdWl2YW50ZXM6ICANCg0KMS4gYHZhbHVlLnJlcGxhY2UoIiMiLCAiYXVjdW4iKWAgICANCihyZW1wbGFjZSBsZSBjYXJhY3TDqHJlICM6IGF1Y3VuIGV0IGF1Y3VuTi9EICkgICAgIA0KIA0KMi4gYGlmKHZhbHVlLmNvbnRhaW5zKCIjIiksImF1Y3VuIiwgdmFsdWUpYCAgIA0KKHJlbXBsYWNlIGxlcyBjZWxsdWxlcyBkZXMgIyBldCAjTkQgcGFyIGF1Y3VuKSAgDQoNCjMuIGBpZih2YWx1ZT09KCIjIiksImF1Y3VuIiwgdmFsdWUpYCAgICAgDQoocmVtcGxhY2Ugc2V1bGVtZW50IGxlcyBjZWxsdWxlcyAjLCBwYXMgbGVzICNORCBwYXIgYXVjdW4pIA0KPC9kaXY+DQoNCjwvYnI+DQoNCg0KKioqDQoNCiMjIDkuNS4gQ3LDqWVyIGV0IGNvcGllciBkZXMgY29sb25uZXMNCg0KPC9icj4NCg0KYMOJZGl0ZXIgbGEgY29sb25uZSAtPiBBam91dGVyIHVuZSBjb2xvbm5lIGVuIGZvbmN0aW9uIGRlIGNldHRlIGNvbG9ubmVgDQoNCiFbXShpbWFnZXMvT1IzMi5qcGcpDQoNCg0KIyMgRXhlcmNpY2UNCg0KPGRpdiBjbGFzcyA9ICJib3gyIj4NCkNyw6llciB1bmUgbm91dmVsbGUgY29sb25uZSBzdXIgbGEgYmFzZSBkZSBsYSBjb2xvbm5lICpKb3VyIGRlIGxhIHNlbWFpbmUqIGluZGlxdWFudCBzaSBsZSBqb3VyIGVzdCBlbiBzZW1haW5lIG91IGZpbiBkZSBzZW1haW5lLg0KPC9kaXY+DQo8ZGl2IGNsYXNzID0gImJveDEiPg0KYGlmKHZhbHVlID4gNSwiZmluIGRlIHNlbWFpbmUiLCJzZW1haW5lIilgDQo8L2Rpdj4NCg0KPC9icj4NCg0KPGRpdiBjbGFzcyA9ICJib3gyIj4NCkNyw6llciB1bmUgY29sb25uZSDDoCBwYXJ0aXIgZGUgbGEgY29sb25uZSAqaGV1cmUgZGUgbCdpbmNpZGVudCogZW4gbmUgY29uc2VydmFudCBxdWUgbCdoZXVyZSwgc2FucyBsZXMgbWludXRlcywgZXQgcmFqb3V0ZXIgbGEgbGV0dHJlIGggcG91ciBkb25uZXIgcGFyIGV4ZW1wbGUgY2VjaTogMTU6MTIgIC0+ICAxNWguICANCjwvZGl2Pg0KPGRpdiBjbGFzcyA9ICJib3gxIj4NCmB2YWx1ZS5zcGxpdCgnOicpWzBdICsgImgiYC4gIA0KDQpPdQ0KDQpgdmFsdWUuc3BsaXRCeUxlbmd0aHMoMilbMF0gKyAiaCJgLiAgDQo8L2Rpdj4NCg0KPC9icj4NCg0KDQoqKioNCg0KDQojIDEwLiBMZXMgZXhwcmVzc2lvbnMgcsOpZ3VsacOocmVzIHsjZXhwcmVzc2lvbn0NCg0KIyMgMTAuMS4gQ2FyYWN0w6lyaXN0aXF1ZXMgIA0KDQotIEwndXNhZ2UgZGUgR1JFTCBwZXJtZXQgZGVzIG1hbmlwdWxhdGlvbnMgZGUgZG9ubsOpZXMgYmVhdWNvdXAgcGx1cyBhdmFuY8OpZXMgcXVlIGwndXRpbGlzYXRpb24gZGVzIGZvbmN0aW9ucyBhdXRvbWF0aXPDqWVzLCBtYWlzIE9wZW5SZWZpbmUgcGVybWV0IGVuIHBsdXMgZGUgY29tYmluZXIgbCd1dGlsaXNhdGlvbiBkZXMgZXhwcmVzc2lvbnMgcsOpZ3VsacOocmVzIGF2ZWMgR1JFTCBwb3VyIGVuIGF1Z21lbnRlciBsYSBwdWlzc2FuY2UuIA0KLSBMZXMgZXhwcmVzc2lvbnMgcsOpZ3VsacOocmVzIHBlcm1ldHRlbnQsIMOgIHBhcnRpciBkJ3VuZSBzeW50YXhlIHNww6ljaWZpcXVlLCBkJ2lkZW50aWZpZXIgZGVzIHBhdHRlcm5zIGRhbnMgdW4gY29udGVudS4gIA0KLSBMb3JzcXUndXRpbGlzw6llcyBhdmVjIEdSRUwsIGNlcyBleHByZXNzaW9ucyBwZXJtZXR0ZW50IGRvbmMgZCdpZGVudGlmaWVyIGV0IGQnZXh0cmFpcmUgZGVzIGNvbnRlbnVzIHRyw6hzIHByw6ljaXMgcG91ciBlbnN1aXRlIGxlcyBtYW5pcHVsZXIgc2Vsb24gbGVzIGJlc29pbnMuICANCi0gRWxsZXMgcGV1dmVudCDDqnRyZSB1dGlsaXPDqWVzIMOgIGRpZmbDqXJlbnRzIGVuZHJvaXRzIGRhbnMgT3BlblJlZmluZSBldCBkb2l2ZW50IHRvdWpvdXJzIMOqdHJlIGVudG91csOpZXMgZGUgYC8gL2A6IGZpbHRyZXMsIGZhY2V0dGVzLCBmZW7DqnRyZSBHUkVMLg0KLSBDZXJ0YWluZXMgZXhwcmVzc2lvbnMgcGV1dmVudCBzJ8OpY3JpcmUgZW4gR1JFTCBhdmVjIG91IHNhbnMgcmVnZXguICANCi0gTGVzIGZvbmN0aW9ucyBHUkVMIHF1aSBhY2NlcHRlbnQgbGVzIGV4cHJlc3Npb25zIHLDqWd1bGnDqHJlczogYHJlcGxhY2VgLCBgbWF0Y2hgLCBgcGFydGl0aW9uYCwgYHJwYXJ0aXRpb25gLCBgc3BsaXRgLg0KDQo8L2JyPg0KDQohW10oaW1hZ2VzL09SMzMuanBnKQ0KDQoNCi0gTWFpcyBjZXJ0YWluZXMgZm9uY3Rpb25zIChjb21tZSBgbWF0Y2hgKSBuJ2FjY2VwdGVudCBxdWUgY2VzIGV4cHJlc3Npb25zLiAgDQo8L2JyPg0KDQo8ZGl2IGNsYXNzID0gIm5vdGUiPg0KDQpMZXMgZXhwcmVzc2lvbnMgcsOpZ3VsacOocmVzIHBldXZlbnQgw6p0cmUgdXRpbGlzw6llcyBhdmVjIHBsdXNpZXVycyBhdXRyZXMgbGFuZ2FnZXMgZG9udCBbUl0oaHR0cHM6Ly90b3dhcmRzZGF0YXNjaWVuY2UuY29tL2EtZ2VudGxlLWludHJvZHVjdGlvbi10by1yZWd1bGFyLWV4cHJlc3Npb25zLXdpdGgtci1kZjVlODk3Y2E0MzIpIGV0IFtQeXRob25dKGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvaG93dG8vcmVnZXguaHRtbCkgZXQgZGFucyBkZXMgbG9naWNpZWxzIHF1aSBuJ29udCByaWVuIMOgIHZvaXIgYXZlYyBsZXMgc3RhdGlzdGlxdWVzIGNvbW1lIFtPcGVuT2ZmaWNlXShodHRwczovL3dpa2kub3Blbm9mZmljZS5vcmcvd2lraS9Eb2N1bWVudGF0aW9uL0hvd19Ub3MvUmVndWxhcl9FeHByZXNzaW9uc19pbl9Xcml0ZXIpLg0KDQpQb3VyIGVuIHNhdm9pciBwbHVzOiAgDQotIGh0dHBzOi8vZ2l0aHViLmNvbS9PcGVuUmVmaW5lL09wZW5SZWZpbmUvd2lraS9VbmRlcnN0YW5kaW5nLVJlZ3VsYXItRXhwcmVzc2lvbnMgIA0KLSBodHRwczovL3JlZ2V4MTAxLmNvbS8gIA0KDQo8L2Rpdj4NCg0KPC9icj4NCg0KKioqDQoNCiMjIDEwLjIuIExhIHN5bnRheGUgZGUgYmFzZTogICANCg0KTGEgc3ludGF4ZSBlc3QgY29tcG9zw6llIGQnw6lsw6ltZW50cyBwZXJtZXR0YW50IGRlICBjaWJsZXIgZGVzIGNhcmFjdMOocmVzIHByw6ljaXMgZXQgZGUgZMOpZmluaXIgbGV1ciBlbXBsYWNlbWVudCBldCBsZXVyIG9jY3VycmVuY2UuDQoNCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsNCnwgVFlQRVMgREUgQ0FSQUNUw4hSRVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUVVBTlRJRklDQVRFVVJTIEVUIEVNUExBQ0VNRU5UICAgICAgICAgICAgICAgICB8IA0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Kw0KfCBgLmAgOiBO4oCZaW1wb3J0ZSBxdW9pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgYCtgIDogMSBvdSBwbHVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rDQp8IGBcd2AgOiBuJ2ltcG9ydGUgcXVlbCBtb3QsIGNoaWZmcmUgb3UgXyAgKGBcV2AgOiBzYXVmKSAgICAgfCBgKmAgOiAwIG91IHBsdXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIA0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKw0KfCBgXGRgIDogQ2hpZmZyZXMgICAgICAoYFxEYCA6IHNhdWYpICAgICAgICAgICAgICAgICAgICB8IGA/YCA6IDAgb3UgdW4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICANCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsNCnwgYFxzYCA6IEVzcGFjZXMgICAgICAgICAoYFxTYCA6IHNhdWYpICAgICAgICAgICAgICAgICAgfCBgezJ9YCA6IE5vbWJyZSBleGFjdCAoaWNpIDIpICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKw0KfCBgW0EtWl1gIDogTWFqdXNjdWxlcyAgICAgKGBbXkEtWl1gIDogc2F1ZikgICAgICAgICAgICB8IGB7LDR9YCA6IEVudHJlIDAgZXQgNCBpbmNsLiAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgIA0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsNCnwgYFthLXpdYCA6IE1pbnVzY3VsZXMgICAgICAoYFteYS16XWAgOiBzYXVmKSAgICAgICAgICAgfCBgezQsfWAgOiA0IG91IHBsdXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IA0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsNCnwgYFthYmQ7XWAgOiBsZXMgbGV0dHJlcyBhLCBiLCBjLCBkIGV0IGxlIDsgICAgICAgICAgICAgfCBgezE7M31gIDogMSBPVSAzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCANCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKw0KfCBgYWJjZGAgOiB1bmUgb3UgcGx1c2lldXJzIGxldHRyZXMgZXhhY3RlcyAgICAgICAgICAgICB8IGB7MSwzfWAgOiBFbnRyZSAxIGV0IDMgaW5jbC4gICAgICAgICAgICAgICAgICAgICB8IA0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rDQp8IGB8YCA6IE91ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGBeYCA6IETDqWJ1dCBkJ3VuZSBsaWduZSAgICAgICAgICAgICAgICB8IA0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rDQp8IGAoKWAgOiBHcm91cGVyIHVuIGNvbnRlbnUgZXQgbGUgZ2FyZGVyIGVuIG3DqW1vaXJlICAgICAgfCBgJGAgOiBGaW4gZCd1bmUgbGlnbmUgb3UgcmFwcGVsZXIgdW4gZ3JvdXBlICAgIHwNCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKw0KfCAgYFxgIDogQ2hlcmNoZXIgdW4gY2FyYWN0w6hyZSBzcMOpY2lhbCBsaXR0w6lyYWxlbWVudCAgICB8IFNhbnMgcXVhbnRpZmljYXRldXIsIGwnb2NjdXJyZW5jZSBlc3QgZGUgMSAgICAgICB8DQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsNCg0KIyMjIyMgUGFyIGV4ZW1wbGUsIGplIGNoZXJjaGUgdW4gY29udGVudSBjb3JyZXNwb25kYW50IGF1IG1vdGlmOiAgDQoNCmBeXGR7NH0gK1tBLVpdXC5gICAgIA0KICAgDQotIGTDqWJ1dGUgcGFyIDQgY2hpZmZyZXMgICANCi0gc3VpdmkgZCd1biBlc3BhY2Ugb3UgcGx1cyAgIA0KLSBzdWl2aSBkJ3VuZSBsZXR0cmUgbWFqdXNjdWxlIGF2ZWMgdW4gcG9pbnQgICANCg0KPC9icj4NCg0KIyMjIyMgQXV0cmVzIGV4ZW1wbGVzIGF2ZWMgbGEgc3ludGF4ZSBPcGVuUmVmaW5lOg0KDQotIGB2YWx1ZS5maW5kKC9bQ2NdYXJvbGluZS8pYDogQ2Fyb2xpbmUgZXQgY2Fyb2xpbmUNCg0KLSBgdmFsdWUuZmluZCgvY2Ercm9saW5lLylgOiBjYXJvbGluZSBldCBjYWFhYXJvbGluZQ0KDQotIGB2YWx1ZS5maW5kKC9jYSpyb2xpbmUvKWA6IGNhcm9saW5lLCBjYWFhcm9saW5lIGV0IGNyb2xpbmUNCg0KLSBgdmFsdWUuZmluZCgvY2E/cm9saW5lLylgOiBjYXJvbGluZSBldCBjcm9saW5lIG1haXMgcGFzIGNhYWFyb2xpbmUNCg0KLSBgdmFsdWUuZmluZCgvY2F7NH1yb2xpbmUvKWA6IGNhYWFhcm9saW5lDQoNCi0gYHZhbHVlLmZpbmQoL15DYXJvbFxiLylgOiBDYXJvbCBlbiBkw6lidXQgZCdleHByZXNzaW9uLCBtYWlzIHBhcyBDYXJvbGluZSAoXGIgPSAiYm91bmRhcnkiKQ0KDQotIGB2YWx1ZS5maW5kKC9jW2Etel17Nn1lLylgOiBjICsgNiBtaW51c2N1bGVzICsgZQ0KDQotIGB2YWx1ZS5maW5kKC9DW2EtekEtWjAtOV17Nn1lLylgOiBDICsgNiBtaW51c2N1bGVzLCBtYWp1c2N1bGVzIG91IGNoaWZmcmVzICsgZQ0KDQotIGB2YWx1ZS5maW5kKC9DXHd7Nn1lLylgOiBDICsgW0EtWmEtejAtOV9dICsgZQ0KDQotIGB2YWx1ZS5maW5kKC9DLns2fWUvKWA6IEMgKyA2IG4naW1wb3J0ZSBxdW9pICsgZQ0KDQoNCioqKg0KDQojIyBFeGVyY2ljZQ0KDQojIyMgTWFuaXB1bGVyIGxlcyDDqWzDqW1lbnRzIGRlIHLDqWbDqXJlbmNlcyBiaWJsaW9ncmFwaGlxdWVzDQoNCiFbXShpbWFnZXMvT1IzNi5qcGcpDQoNCjxkaXYgY2xhc3MgPSAiYm94MSI+DQoxLiBBbGxlciBzdXIgbGUgW2d1aWRlIEFQQV0oaHR0cHM6Ly9iaWIudW1vbnRyZWFsLmNhL2NpdGVyL3N0eWxlcy1iaWJsaW9ncmFwaGlxdWVzL2FwYT90YWI9MzI4MSkuICAgICANCjIuIENvcGllciBsZXMgZGV1eCByw6lmw6lyZW5jZXMgZGUgTGVtYWlyZSBldCBMZWJvdmljaSBhdSBwb2ludCAyLjEuICAgICAgDQozLiBEYW5zIE9wZW5SZWZpbmUsIGNsaXF1ZXIgc3VyIGxlIHBldGl0IGxvZ28gZW4gaGF1dCDDoCBnYXVjaGUgLT4gYENyw6llciB1biBwcm9qZXRgIC0+IGBQcmVzc2UtcGFwaWVyYDogQ29sbGVyIGxlcyBkZXV4IHLDqWbDqXJlbmNlcyBlbiAgYWpvdXRhbnQgdW4gc8OpcGFyYXRldXIgKioiOyIqKiDDoCBsYSBmaW4gZGUgbGEgcHJlbWnDqHJlIC0+IFN1aXZhbnQuICAgICAgIA0KDQo0LiBNb2RpZmllciBsZXMgb3B0aW9uczogDQogIC0gTGVzIGNvbG9ubmVzIHNvbnQgc8OpcGFyw6llcyBwYXIgLSBwZXJzb25uYWxpc8OpICI7Ii4gIA0KICAtIETDqWNvY2hlciAiQW5hbHlzZXIgbGEgb3UgbGVzCTEgbGlnbmUocykgc3VpdmFudGUocykgY29tbWUgZGVzIGVudMOqdGVzIGRlIGNvbG9ubmVzIi4gIA0KNS4gQ3LDqWVyIHByb2pldC4gICANCjwvZGl2Pg0KDQo8L2JyPg0KDQo8ZGl2IGNsYXNzID0gImJveDEiPg0KNi4gYMOJZGl0ZXIgbGEgY29sb25uZSAtPiBBam91dGVyIHVuZSBjb2xvbm5lIGVuIGZvbmN0aW9uIGRlIGNldHRlIGNvbG9ubmVgICANCg0KNy4gRXhhbWluZXIgbCdpbXBhY3QgZGUgY2VzIGRldXggY29tbWFuZGVzICoqR1JFTCArIHJlZ2V4KiouIFF1J2VzdC1jZSBxdWkgc2UgcGFzc2U/DQoNCi0gw4lkaXRlciBsZXMgY2VsbHVsZXMgLT4gVHJhbnNmb3JtZXI6IA0KDQo+IGB2YWx1ZS5maW5kKC9cKC4qP1wpLylgICANCg0KPiBgdmFsdWUuZmluZCgvXCguKj9cKS8pLmpvaW4oJywnKS5yZXBsYWNlKCIoIiwiICIpLnJlcGxhY2UoIikiLCAiIilgICANCg0KLT4gQXR0ZW50aW9uIGF1eCBbcXVhbnRpZmljYXRldXJzICJnb3VybWFuZHMiXShodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9lbi11cy9kb3RuZXQvc3RhbmRhcmQvYmFzZS10eXBlcy9xdWFudGlmaWVycy1pbi1yZWd1bGFyLWV4cHJlc3Npb25zI2dyZWVkeS1hbmQtbGF6eS1xdWFudGlmaWVycykgKHZzIHBhcmVzc2V1eCkuDQoNCjwvYnI+DQoNCsOJZGl0ZXIgbGEgY29sb25uZSAtPiBBam91dGVyIHVuZSBjb2xvbm5lIGVuIGZvbmN0aW9uIGRlIGNldHRlIGNvbG9ubmU6ICANCg0KICAtIENyw6llciBsYSBjb2xvbm5lIEF1dGV1ciA6IGB2YWx1ZS5wYXJ0aXRpb24oIigiKVswXWAgb3UgYHZhbHVlLnNwbGl0KCIoIilbMF1gICAgDQogIC0gQ3LDqWVyIGxhIGNvbG9ubmUgQW5uw6llOiBgdmFsdWUucGFydGl0aW9uKCIoIilbMl0ucGFydGl0aW9uKCIpIilbMF1gICAgb3UgYXZlYyByZWdleDogYHZhbHVlLm1hdGNoKC8uKj8oXGR7NH0pLio/LylbMF1gLiAgICANCiAgLSBDcsOpZXIgbGEgY29sb25uZSB0aXRyZTogYHZhbHVlLnBhcnRpdGlvbigiKS4iKVsyXS5wYXJ0aXRpb24oIigiKVswXWAuICAgICAgDQogIC0gQ3LDqWVyIGxhIGNvbG9ubmUgw6lkaXRldXI6IGB2YWx1ZS5wYXJ0aXRpb24oIikuIilbMl0ucGFydGl0aW9uKCIpLiIpWzJdYC4gICAgIA0KICAtIENyw6llciBsYSBjb2xvbm5lIMOpZGl0aW9uOiBgdmFsdWUucGFydGl0aW9uKCIpLiIpWzJdLnBhcnRpdGlvbigiKCIpWzJdLnBhcnRpdGlvbigiw6lkIilbMF1gIG91IGF2ZWMgcmVnZXg6IGB2YWx1ZS5tYXRjaCgvLiooXGQrKS4gw6lkLiovKVswXWAuICANCiAgLSBDcsOpZXIgbGEgY29sb25uZSB2b2x1bWU6IGB2YWx1ZS5wYXJ0aXRpb24oInZvbC4iKVsyXS5wYXJ0aXRpb24oIikiKVswXWAgb3UgYXZlYyByZWdleDogYHZhbHVlLm1hdGNoKC8uKnZvbC4gKFxkKykuKi8pWzBdYC4gIA0KQXZlYyByZWdleDogIA0KLSBTdXBwcmltZXIgbGVzIGxldHRyZXMgZHUgcHLDqW5vbTogYHZhbHVlLnJlcGxhY2UoLyhcc1tBLVpdLlxzKXwoXHNbQS1aXS4sXHMpLywgIiAiKWAuICANCi0gU3VwcHJpbWVyIHRvdXQgbGUgY29udGVudSBzYXVmIGxlcyBub21zIGRlIGZhbWlsbGU6IGB2YWx1ZS5yZXBsYWNlKC8oXHNbQS1aXS5ccyl8KFxzW0EtWl0uLFxzKXwoZXQpfCgsKS8sICIgIilgLiAgDQo8L2Rpdj4NCg0KPC9icj4NCg0KKioqDQoNCiMgMTEuIFRyYW5zcG9zaXRpb24NCg0KIyMgRXhlcmNpY2U6IHRyYW5zcG9zZXIgdW4gdGFibGVhdSBkJ2luZGljYXRldXJzIGR1IFdESQ0KPC9icj4NCg0KKipGaWNoaWVyIG9yaWdpbmFsIHTDqWzDqWNoYXJnw6kgZGUgbGEgW0JhbnF1ZSBtb25kaWFsZV0oaHR0cHM6Ly9kYXRhYmFuay5iYW5xdWVtb25kaWFsZS5vcmcvcmVwb3J0cy5hc3B4P3NvdXJjZT13b3JsZC1kZXZlbG9wbWVudC1pbmRpY2F0b3JzKSBlbiBmb3JtYXQgLmNzdiBjb21wb3PDqSBkZSA1IHBheXMgZXQgNCBpbmRpY2F0ZXVycyDDoCBsJ2hvcml6b250YWxlIGV0IDMgYW5uw6llcyDDoCBsYSB2ZXJ0aWNhbGUqKiAgDQoNCi0gUG91ciBvdXZyaXIgbGUgZmljaGllciDDoCBwYXJ0aXIgZGUgc29uIGVtcGxhY2VtZW50IHN1ciBHaXRodWI6IGh0dHBzOi8vZ2l0aHViLmNvbS9DUkxOUC9vcGVucmVmaW5lIA0KICAtIENsaXF1ZXIgc3VyIGxlIGZpY2hpZXIgKldESV9EYXRhX0V4dHJhY3QuY3N2KiAtPiBDbGlxdWVyIHN1ciBsZSBib3V0b24gUkFXIC0+IGNvcGllciBsJ2FkcmVzc2UgZHUgbmF2aWdhdGV1ci4NCiAgLSBEYW5zIE9wZW5SZWZpbmUsIENyw6llciB1biBwcm9qZXQgLT4gQWRyZXNzZXMgd2ViIChVUkxzKSAtPiBjb2xsZXIgbGUgbGllbi4NCiAgDQohW10oaW1hZ2VzL09SLXRyYW5zcG9zZTEuanBnKQ0KDQo8L2JyPg0KDQoqKjEuIFRyYW5zcG9zZXIgbGVzIGRhdGVzIMOgIGwnaG9yaXpvbnRhbGUgKGZvcm1hdCAqbG9uZyopKiogIA0KDQo8L2JyPg0KDQoqw4lkaXRlciBsZXMgY2VsbHVsZXMgLT4gVHJhbnNwb3NlciAtPiBUcmFuc3Bvc2VyIGxlcyBjZWxsdWxlcyBkZSBwbHVzaWV1cnMgY29sb25uZXMgZW4gbGlnbmVzLi4uKg0KDQoNCjwvYnI+DQoNCg0KIVtdKGltYWdlcy9PUi10cmFuc3Bvc2UyLmpwZykNCg0KPC9icj4NCg0KDQohW10oaW1hZ2VzL09SLXRyYW5zcG9zZTMuanBnKQ0KDQo8L2JyPg0KDQoqKjIuIFJlbXBsaXIgYXV0b21hdGlxdWVtZW50IGxlcyBjZWxsdWxlcyB2aWRlcyBkZXMgZGV1eCBjb2xvbm5lcyDDoCBsYSB2ZXJ0aWNhbGUqKg0KDQoqw4lkaXRlciBsZXMgY2VsbHVsZXMgLT4gUmVjb3BpZXIgbGVzIHZhbGV1cnMgZGFucyBsZXMgY2VsbHVsZXMgdmlkZXMgY29uc8OpY3V0aXZlcyoNCg0KPC9icj4NCg0KKiozLiBUcmFuc3Bvc2VyIGxlcyBpbmRpY2F0ZXVycyBlbiB2YXJpYWJsZXMgw6AgbGEgdmVydGljYWxlKioNCg0KKlRyYW5zcG9zZXIgLT4gQ29udmVydGlyIGVuIGxpc3RlIGxlcyBjb2xvbm5lcyBkZSBjbMOpL3ZhbGV1ci4uLioNCg0KPC9icj4NCg0KIVtdKGltYWdlcy9PUi10cmFuc3Bvc2U0LmpwZykNCg0KPC9icj4NCg0KIVtdKGltYWdlcy9PUi10cmFuc3Bvc2U1LmpwZykNCg0KPC9icj4NCg0KDQoqKioNCg0KIyAxMi4gRXhwb3J0ZXIgdW4gZmljaGllciBldCBmZXJtZXIgT3BlblJlZmluZQ0KDQotIEZvbmN0aW9uIMOgIHV0aWxpc2VyIGxvcnNxdWUgbCdvbiBlc3QgcHLDqnQgw6AgZXhwb3J0ZXIgc29uIGZpY2hpZXIgZW4gZGlmZsOpcmVudHMgZm9ybWF0cyBwb3VyIHRyYXZhaWxsZXIgZGFucyB1biBhdXRyZSBsb2dpY2llbCAoLmNzdiwgLnhscy4uLikNCi0gT1Igc2F1dmVnYXJkZSBhdXRvbWF0aXF1ZW1lbnQgbGVzIGZpY2hpZXJzIHNvdXMgZm9ybWUgZCdhcmNoaXZlcyBkZSBwcm9qZXQgZGFucyB1biBkb3NzaWVyIHN1ciBsZSBwb3N0ZSBkZSB0cmF2YWlsIGF1eHF1ZWxsZXMgb24gcGV1dCBhY2PDqWRlciBlbiBjbGlxdWFudCBzdXIgYE91dnJpciB1biBwcm9qZXRgIHN1ciBsYSBwYWdlIHByaW5jaXBhbGUuDQotIEwnb3V0aWwgYEV4cG9ydGV1ciB0YWJ1bGFpcmUgcGVyc29ubmFsaXPDqWAgZXN0IHRyw6hzIHV0aWxlIHBvdXIgcGFyYW3DqXRyZXIgbCdleHBvcnRhdGlvbiAoc8OpbGVjdGlvbiBkZSBjb2xvbm5lcywgZm9ybWF0IGRlIGRhdGVzLCBmb3JtYXQgZGUgZmljaGllci4uLikNCi0gRmVybWVyIGwnb25nbGV0IG5lIGZlcm1lIHBhcyBsZSBzZXJ2ZXVyIHF1aSBjb250aW51ZXJhIMOgIHJvdWxlciBlbiBhcnJpw6hyZS1wbGFuLg0KLSBBbGxlciDDoCBsYSBmZW7DqnRyZSBub2lyZSBkdSB0ZXJtaW5hbCBldCB1dGlsaXNlciBsZXMgdG91Y2hlcyBDVFJMICsgQyBqdXNxdSfDoCBjZSBxdSdlbGxlIHNlIGZlcm1lIGQnZWxsZS1tw6ptZSAoaWwgZXN0IHBhcmZvaXMgbsOpY2Vzc2FpcmUgZGUgcsOpcMOpdGVyIMOgIHBsdXMgZCd1bmUgcmVwcmlzZSkuIExlIGZpY2hpZXIgc2VyYSBlbnJlZ2lzdHLDqSB1bmUgZGVybmnDqHJlIGZvaXMgZXQgbGUgbG9naWNpZWwgc2VyYSAgbWFpbnRlbmFudCBiZWwgZXQgYmllbiBmZXJtw6kuDQoNCjwvYnI+DQoNCioqKg0KDQoNCiMgMTMuIFF1ZWxxdWVzIHJlY2V0dGVzIHBvdXIgZmFpcmUgZHVyZXIgbGUgcGxhaXNpcg0KDQo8ZGl2IGNsYXNzID0gImJveDIiPg0KIyMjIyBFeHRyYWlyZSBzZXVsZW1lbnQgY2VydGFpbnMgY2FyYWN0w6hyZXMgc2Vsb24gbGV1ciBwb3NpdGlvbg0KPC9kaXY+DQo8ZGl2IGNsYXNzID0gImJveDEiPg0KDQpFeHRyYWlyZSBzZXVsZW1lbnQgbGVzIGNhcmFjdMOocmVzIGRlIDUgw6AgNyAgDQoNCi0gdmFsdWVbNSwgN10NCg0KRXh0cmFpcmUgbGVzIGNhcmFjdMOocmVzIMOgIHBhcnRpciBkZSA1ICANCg0KLSB2YWx1ZS5zdWJzdHJpbmcoNSkNCjwvZGl2Pg0KDQo8L2JyPg0KDQo8ZGl2IGNsYXNzID0gImJveDIiPg0KIyMjIyBTYXZvaXIgc2kgdW5lIGNvbmRpdGlvbiBlc3QgdnJhaWUgb3UgZmF1c3NlPw0KPC9kaXY+DQo8ZGl2IGNsYXNzID0gImJveDEiPg0KRXN0LWNlIHF1ZSBsZSBjb250ZW51IGRlcyB2YWxldXJzIGNvcnJlc3BvbmQgw6AgIjIwMTktMDEtMDEiICANCg0KLSB2YWx1ZT09IjIwMTktMDEtMDEiDQo8L2Rpdj4NCg0KPC9icj4NCg0KPGRpdiBjbGFzcyA9ICJib3gyIj4NCiMjIyMgQ29ubmHDrnRyZSBsYSBsb25ndWV1ciBkZXMgdmFsZXVycyBkJ3VuZSBjb2xvbm5lDQo8L2Rpdj4NCjxkaXYgY2xhc3MgPSAiYm94MSI+DQotIHZhbHVlLmxlbmd0aCgpDQo8L2Rpdj4NCg0KPC9icj4NCg0KPGRpdiBjbGFzcyA9ICJib3gyIj4NCiMjIyMgQ29tcHRlciBsZSBub21icmUgZGUgbW90cyBkYW5zIGRlcyBjZWxsdWxlcyAoc8OpcGFyw6lzIHBhciBkZXMgZXNwYWNlcykNCjwvZGl2Pg0KPGRpdiBjbGFzcyA9ICJib3gxIj4NCi0gdmFsdWUuc3BsaXQoIiAiKS5sZW5ndGgoKSBvdSB2YWx1ZS5zcGxpdCgvXHMvKS5sZW5ndGgoKQ0KPC9kaXY+DQoNCjwvYnI+DQoNCjxkaXYgY2xhc3MgPSAiYm94MiI+DQojIyMjIENhbGN1bCBkJ3VuIHBvdXJjZW50YWdlIGFycm9uZGkgKGV4IGQndW4gcsOpc3VsdGF0IHN1ciAxMCkNCjwvZGl2Pg0KPGRpdiBjbGFzcyA9ICJib3gxIj4NCi0gcm91bmQoKHZhbHVlKjEwMCkgLyAxMCkNCjwvZGl2Pg0KDQo8L2JyPg0KDQo8ZGl2IGNsYXNzID0gImJveDIiPg0KIyMjIyBUcmFuc2Zvcm1lciB1biBmb3JtYXQgZGF0ZSBlbiBmb3JtYXQgdGV4dGUgcGx1cyBsaXNpYmxlDQo8L2Rpdj4NCjxkaXYgY2xhc3MgPSAiYm94MSI+DQotIHZhbHVlLnRvU3RyaW5nKCJkZCBNTU1NIHl5eXkiKQ0KDQo8L2Rpdj4NCg0KPC9icj4NCg0KDQo8ZGl2IGNsYXNzID0gImJveDIiPg0KIyMjIyBMYSBjcsOpYXRpb24gZXQgbWFuaXB1bGF0aW9uIGRlIGxpc3RlcyAoKmFycmF5KikgLSBEaXZpc2VyIGxlIGNvbnRlbnUgZGUgY2VsbHVsZXMgDQo8L2Rpdj4NCjxkaXYgY2xhc3MgPSAiYm94MSI+DQpEaXZpc2VyIGxlIGNvbnRlbnUgZGUgY2VsbHVsZXMgZW4gZm9uY3Rpb24gZCd1biBzw6lwYXJhdGV1ciBwb3VyIG5lIGNvbnNlcnZlciBxdWUgbGUgcHJlbWllciDDqWzDqW1lbnQgICAgDQoNCi0gdmFsdWUuc3BsaXQoIiAiKVswXQ0KDQpEaXZpc2VyIGxlIGNvbnRlbnUgZCd1bmUgY2VsbHVsZSBwb3VyIGxlIHLDqW9yZG9ubmVyIA0KDQotIHZhbHVlLnNwbGl0KCIsIikucmV2ZXJzZSgpLmpvaW4oIiwiKQ0KDQotIHZhbHVlLnNwbGl0KCIsIikuc29ydCgpLmpvaW4oIiwiKQ0KDQpEaXZpc2VyIGFwcsOocyBsZXMgMyBwcmVtaWVycyBjYXJhY3TDqHJlcyBldCBjb25zZXJ2ZXIgbGUgcHJlbWllciDDqWzDqW1lbnQgIA0KDQotIHZhbHVlLnNwbGl0QnlMZW5ndGhzKDMpWzBdIA0KDQpEaXZpc2VyIHNlbG9uIGxlIHR5cGUgZGUgY2FyYWN0w6hyZXMgZXQgcmV0ZW5pciBsZSBkZXV4acOobWUgw6lsw6ltZW50ICANCg0KLSB2YWx1ZS5zcGxpdEJ5Q2hhclR5cGUoKVsxXQ0KDQpEaXZpc2VyIGxlIGNvbnRlbnUgZCd1bmUgY2VsbHVsZSBzdXIgdW4gdGVybWUgeCBldCBjb25zZXJ2ZXIgbGUgY29udGVudSBwcsOpY8OpZGVudCANCg0KLSB2YWx1ZS5wYXJ0aXRpb24oInRlcm1lIilbMF0NCg0KLSB2YWx1ZS5wYXJ0aXRpb24oIiB0byAiKVsyXS5wYXJ0aXRpb24oIiBvbiAiKVswXQ0KDQo8L2Rpdj4NCg0KPC9icj4NCg0KPGRpdiBjbGFzcyA9ICJib3gyIj4NCiMjIyMgSW52ZXJzZXIgbGUgY29udGVudSBkJ3VuZSBjZWxsdWxlDQo8L2Rpdj4NCjxkaXYgY2xhc3MgPSAiYm94MSI+DQpEaXZpc2VyIGxlIGNvbnRlbnUgZCd1bmUgY2VsbHVsZSBldCBpbnZlcnNlciBsJ29yZHJlIGRlIHByw6lzZW50YXRpb24gZW4gYWpvdXRhbnQgdW5lIHZpcmd1bGUgZW50cmUgbGVzIGRldXggIA0KDQotIHZhbHVlLnNwbGl0KCcgJylbMV0gKyAiLCIgKyAiICIgKyB2YWx1ZS5zcGxpdCgnICcpWzBdDQoNCk9VDQoNCi0gdmFsdWUubWF0Y2goLyguKiksKC4qKS8pLnJldmVyc2UoKS5qb2luKCIgIikNCjwvZGl2Pg0KDQoNCjwvYnI+DQoNCjxkaXYgY2xhc3MgPSAiYm94MiI+DQojIyMjIEFqb3V0ZXIgdW4gesOpcm8gcG91ciBhdm9pciB1biBub21icmUgZGUgY2FyYWN0w6hyZXMgcHLDqWNpcw0KPC9kaXY+DQo8ZGl2IGNsYXNzID0gImJveDEiPg0KQWpvdXRlciB1biB6w6lybyBkZXZhbnQgbGUgY29udGVudSBzaSBkb25uZSB1bmUgY2hhaW5lIGRlIDAgw6AgMiBjYXJhY3TDqHJlcyAgDQoNCi0gIjAiWzAsMi1sZW5ndGgodmFsdWUpXSArIHZhbHVlDQo8L2Rpdj4NCg0KPC9icj4NCg0KPGRpdiBjbGFzcyA9ICJib3gyIj4NCiMjIyMgQXBwbGlxdWVyIGRlcyBjb25kaXRpb25zDQo8L2Rpdj4NCjxkaXYgY2xhc3MgPSAiYm94MSI+DQpGb25jdGlvbiBpZiAtIG3Dqm1lIGNob3NlIHF1ZSBkYW5zIGV4Y2VsICANCg0KLSBpZih0ZXN0LCBzaSB0ZXN0IGVzdCB2cmFpLCBzaSB0ZXN0IGVzdCB2cmFpKQ0KDQpTaSBsYSBjZWxsdWxlIGNvbnRpZW50IHgsIMOpY3JpcmUgeCwgc2lub24geQ0KDQotIGlmKHZhbHVlLmNvbnRhaW5zKCJ4IiksICJ4IiwgInkiKQ0KIA0KLSBpZih2YWx1ZS5jb250YWlucygiMSIpLCB2YWx1ZSwgbnVsbCkNCg0KPC9kaXY+DQoNCjwvYnI+DQoNCjxkaXYgY2xhc3MgPSAiYm94MiI+DQojIyMjIENvbXBhcmVyIGRldXggY29sb25uZXMNCjwvZGl2Pg0KPGRpdiBjbGFzcyA9ICJib3gxIj4NCklkZW50aWZpZXIgc2kgbGUgY29udGVudSBkZXMgY2VsbHVsZXMgZCd1bmUgY29sb25uZSBlc3QgcGFyZWlsIMOgIHVuZSBhdXRyZSAgDQoNCi0gdmFsdWUgPT0gY2VsbHNbJ2F1dHJlLWNvbG9ubmUnXS52YWx1ZQ0KDQpFc3QtY2UgcXVlIGxlIHByZW1pZXIgY2FyYWN0w6hyZSBkZSBsYSBjb2xvbm5lIHggZXN0IGxlIG3Dqm1lIHF1ZSBsYSBjb2xvbm5lIHkgIA0KDQotIGNlbGxzWyJjb2xvbm5lMSJdLnZhbHVlWzBdID09IGNlbGxzWyJjb2xvbm5lMiJdLnZhbHVlWzBdDQoNCkNvbXBhcmVyIGxlIGNvbnRlbnUgZGUgZGV1eCBjb2xvbm5lcyBldCBtb2RpZmllciBsZXMgdmFsZXVycyBzZWxvbiBsZSByw6lzdWx0YXQgZGUgbGEgY29uZGl0aW9uICANCg0KLSBpZihjZWxsc1siY29sb25uZTEiXS52YWx1ZSA9PSBjZWxsc1siY29sb25uZTIiXS52YWx1ZSwgIlBhcmVpbCIsICJQYXMgcGFyZWlsIikNCjwvZGl2Pg0KDQo8L2JyPg0KDQo8ZGl2IGNsYXNzID0gImJveDIiPg0KIyMjIyBWw6lyaWZpZXIgbGUgZm9ybWF0IGQndW5lIGNvbG9ubmUNCjwvZGl2Pg0KPGRpdiBjbGFzcyA9ICJib3gxIj4NCg0KLSB2YWx1ZS50eXBlKCkgIA0KDQo8L2Rpdj4NCg0KPC9icj4NCg0KDQoNCjxkaXYgY2xhc3MgPSAiYm94MiI+DQojIyMjIEZhaXJlIGRlcyBjYWxjdWxzIHNpbXBsZXMgKHZhbGV1cnMgbnVtw6lyaXF1ZXMpDQo8L2Rpdj4NCjxkaXYgY2xhc3MgPSAiYm94MSI+DQoNClNvbW1lIGQndW5lIGNvbG9ubmUgcGx1cyB1bmUgYXV0cmUgIA0KDQotIHZhbHVlICsgY2VsbHNbJ0pvdXIgZHUgbW9pcyddLnZhbHVlDQoNCkFycm9uZGlyIGxlIGNvbnRlbnUgIA0KDQotIHJvdW5kKHZhbHVlKQ0KPC9kaXY+DQoNCg0KPC9icj4NCg0KPGRpdiBjbGFzcyA9ICJib3gyIj4NCiMjIyMgUmVwcmVuZHJlIGV0IGNvbmNhdMOpbmVyIGxlIGNvbnRlbnUgZCd1bmUgYXV0cmUgY29sb25uZQ0KPC9kaXY+DQo8ZGl2IGNsYXNzID0gImJveDEiPg0KQ3LDqWVyIHVuZSBub3V2ZWxsZSBjb2xvbm5lIGVuIGZ1c2lvbm5hbnQgbGUgY29udGVudSBkZSBkZXV4IGF1dHJlcyBldCBham91dGVyIGR1IHRleHRlICANCg0KLSBjZWxsc1snbm9tJ10udmFsdWUgKyBjZWxsc1snbm9tJ10udmFsdWUgKyAiQm9uam91ciEiDQoNCkNyw6llciB1bmUgbm91dmVsbGUgY29sb25uZSBhdmVjIGxlcyB0cm9pcyBwcmVtaWVycyBjYXJhY3TDqHJlcyBzZXVsZW1lbnQgIA0KDQotIGNlbGxzWydTeW1wdG9tZSddLnZhbHVlWzAsM10NCg0KVHJhbnNmb3JtZXIgbGUgY29udGVudSBkJ3VuZSBjb2xvbm5lIGVuIGNvbmNhdMOpbmFudCBsZSBjb250ZW51IGQndW5lIGF1dHJlICANCg0KLSB2YWx1ZSArICcgJyArIGNlbGxzWydzdHJlZXQtdHlwZSddLnZhbHVlDQo8L2Rpdj4NCg0KPC9icj4NCg0KPGRpdiBjbGFzcyA9ICJib3gyIj4NCiMjIyMgUmVtcGxhY2VyIGRlcyBjYXJhY3TDqHJlcw0KPC9kaXY+DQo8ZGl2IGNsYXNzID0gImJveDEiPg0KDQpSZW1wbGFjZXIgdG91dCBsZSBjb250ZW51IGQndW5lIGNvbG9ubmUgKGljaSwgdmlkZXIgbGEgY29sb25uZSkgIA0KDQotIHZhbHVlLnJlcGxhY2UodmFsdWUsICIiKQ0KDQpSZW1wbGFjZXIgdW5lIGxldHRyZSBwYXIgdW5lIGF1dHJlICANCg0KLSB2YWx1ZS5yZXBsYWNlQ2hhcnMoIm8iLCAiYSIpDQoNCkZhaXJlIHBsdXNpZXVycyByZW1wbGFjZW1lbnRzIGQndW4gY291cCAgDQoNCi0gdmFsdWUucmVwbGFjZSgiMSIsICJ1biIpLnJlcGxhY2UoIjIiLCAiZGV1eCIpLnJlcGxhY2UoIjMiLCAidHJvaXMiKQ0KPC9kaXY+DQoNCjwvYnI+DQoNCjxkaXYgY2xhc3MgPSAiYm94MiI+DQojIyMjIElkZW50aWZpZXIgZGVzIGNlbGx1bGVzIHF1aSBjb21tZW5jZW50IHBhci4uLiAocsOpc3VsdGF0IGJvb2zDqWVuKQ0KPC9kaXY+DQo8ZGl2IGNsYXNzID0gImJveDEiPg0KDQotIHZhbHVlLnN0YXJ0c1dpdGgoIkJlcnJpIikgIA0KDQo8L2Rpdj4NCg0KPC9icj4NCg0KPGRpdiBjbGFzcyA9ICJib3gyIj4NCiMjIyMgU3VwcHJpbWVyIHVuIGNhcmFjdMOocmUgZGUgZMOpYnV0IG91IGZpbiBkZSB2YWxldXI6DQo8L2Rpdj4NCjxkaXYgY2xhc3MgPSAiYm94MSI+DQoNClN1cHByaW1lIOKAnFPigJ0gZHUgZMOpYnV0IGRlIGxhIGNlbGx1bGUgIA0KDQotIHZhbHVlLnJlcGxhY2UoL15TLywiIikgW3JlZ2V4IF4gaW5kaXF1ZSBsZSBkw6lidXQgZCd1bmUgY2VsbHVsZV0NCg0KU3VwcHJpbWUgIi4iIMOgIGxhIGZpbiBkZSBsYSBjZWxsdWxlICANCg0KLSB2YWx1ZS5yZXBsYWNlKC9cLiQvLCIiKSBbcmVnZXggJCBpbmRpcXVlIGxhIGZpbiBkJ3VuZSBjZWxsdWxlXQ0KPC9kaXY+DQoNCjwvYnI+DQoNCjxkaXYgY2xhc3MgPSAiYm94MSI+DQoNCk1vZGlmaWVyL3N1cHByaW1lciBsYSBwb25jdHVhdGlvbg0KDQotIHZhbHVlLnJlcGxhY2UoL1xwe1B1bmN0fS8sJyAnKQ0KDQo8L2Rpdj4NCg0KPC9icj4NCg0KPGRpdiBjbGFzcyA9ICJib3gyIj4NCiMjIyMgVHJhdmFpbGxlciBhdmVjIHVuIGZvcm1hdCBkYXRlDQo8L2Rpdj4NCjxkaXYgY2xhc3MgPSAiYm94MSI+DQpFeHRyYWlyZSBzZXVsZW1lbnQgdW5lIHBhcnRpZSBkJ3VuZSBkYXRlICANCg0KLSB2YWx1ZS50b0RhdGUoKS5kYXRlUGFydCgieWVhciIpICANCg0KLSAgZGlmZihub3coKSx2YWx1ZSwnd2Vla3MnKSAgDQoNCjwvZGl2Pg0KDQoNCioqKg0KDQoNCiMgMTQuIFJlc3NvdXJjZXMNCg0KLSBbU2l0ZSBldCBkb2N1bWVudGF0aW9uIG9mZmljaWVsc10oaHR0cHM6Ly9vcGVucmVmaW5lLm9yZy8pDQoNCi0gSm9obiBMaXR0bGUsIDIwMTgsIFtDbGVhbmluZyBEYXRhIHdpdGggT3BlblJlZmluZV0oaHR0cHM6Ly9saWJqb2huLmdpdGh1Yi5pby9vcGVucmVmaW5lL2luZGV4Lmh0bWwpICANCg0KLSBFdmFuIFdpbGwsIDIwMjEsIFtHZXQgU3RhcnRlZCB3aXRoIE9wZW5SZWZpbmU6IEV4cGxvcmUsIENsZWFuLCBhbmQgVHJhbnNmb3JtIHlvdXIgRGF0YSFdKGh0dHBzOi8vZXZhbndpbGwuZ2l0aHViLmlvL29wZW5yZWZpbmUtYi8pICANCg0KLSBVQ0xBLCAyMDE5LCBbR2V0dGluZyBzdGFydGVkIHdpdGggT3BlblJlZmluZSBEaWdpdGFsIEh1bWFuaXRpZXMgMjAxXShodHRwOi8vbWlyaWFtcG9zbmVyLmNvbS9jbGFzc2VzL2RoMjAxdzE5L3R1dG9yaWFscy1ndWlkZXMvZGF0YS1jbGVhbmluZy1hbmQtbWFuaXB1bGF0aW9uL2dldHRpbmctc3RhcnRlZC13aXRoLW9wZW5yZWZpbmUvKQ0KDQotIFtSZWZpbmVQcm8gS25vd2xlZGdlIEJhc2UgZm9yIE9wZW5SZWZpbmVdKGh0dHBzOi8va2IucmVmaW5lcHJvLmNvbS8pDQoNCi0gU2V0aCB2YW4gSG9vbGFuZCwgUnViZW4gVmVyYm9yZ2gsIGFuZCBNYXggRGUgV2lsZGUsIFtDbGVhbmluZyBEYXRhIHdpdGggT3BlblJlZmluZV0oaHR0cHM6Ly9wcm9ncmFtbWluZ2hpc3Rvcmlhbi5vcmcvZW4vbGVzc29ucy9jbGVhbmluZy1kYXRhLXdpdGgtb3BlbnJlZmluZSkNCg0KLSBbSW50cm9kdWN0aW9uIHRvIE9wZW5SZWZpbmVdKGh0dHBzOi8vZG9hbmEuZ2l0Ym9va3MuaW8vdGVzdC9jb250ZW50LykNCg0KLSBEYXRhIENhcnBlbnRyeSwgW0RhdGEgQ2xlYW5pbmcgd2l0aCBPcGVuUmVmaW5lIGZvciBFY29sb2dpc3RzXShodHRwczovL2RhdGFjYXJwZW50cnkub3JnL09wZW5SZWZpbmUtZWNvbG9neS1sZXNzb24vMDAtZ2V0dGluZy1zdGFydGVkL2luZGV4Lmh0bWwpDQoNCi0gT3dlbiBTdGVwaGVucywgMjAxNCwgW0ludHJvZHVjdGlvbiB0byBPcGVuUmVmaW5lXShodHRwOi8vd3d3Lm1lYW5ib3lmcmllbmQuY29tL292ZXJkdWVfaWRlYXMvd3AtY29udGVudC91cGxvYWRzLzIwMTQvMTEvSW50cm9kdWN0aW9uLXRvLU9wZW5SZWZpbmUtaGFuZG91dC1DQy1CWS5wZGYpDQoNCi0gVmVyYm9yZ2ggZXQgRGUgV2lsZGUsIDIwMTMsIFtVc2luZyBPcGVuUmVmaW5lXShodHRwczovL3d3dy5nYmlmLmVzL3dwLWNvbnRlbnQvdXBsb2Fkcy8yMDE4LzAxL1VzaW5nLU9wZW5SZWZpbmVCb29rLnBkZikNCg0KLSBbTGlicmFyeSBDYXJwZW50cnk6IE9wZW5SZWZpbmVdKGh0dHBzOi8vbGlicmFyeWNhcnBlbnRyeS5vcmcvbGMtb3Blbi1yZWZpbmUvMDEtaW50cm9kdWN0aW9uL2luZGV4Lmh0bWwpDQoNCi0gW0dyYXRlZnVsIERhdGFdKGh0dHBzOi8vZ2l0aHViLmNvbS9zY290dHl0aGVyZWQvZ3JhdGVmdWxkYXRhL3dpa2kpICANCg0KLSBbRGF2aWQgSHV5bmgsIEdvb2dsZSBSZWZpbmVdKGh0dHA6Ly93d3cuZGF2aWRodXluaC5uZXQvc3BhY2VzL25pY2FyMjAxMS90dXRvcmlhbC5wZGYpDQoNCi0gW09wZW4gUmVmaW5lIEZPciBMaWJyYXJpYW5zXShodHRwOi8vbGl3b25nLmJsb2dzcG90LmNvbS8pDQoNCi0gW0NoZWF0IFNoZWV0OiBSZWd1bGFyIEV4cHJlc3Npb25zICYgR1JFTF0oaHR0cHM6Ly9jb2RlNGxpYnRvcm9udG8uZ2l0aHViLmlvLzIwMTgtMTAtMTItYWNjZXNzL0dvb2dsZVJlZmluZUNoZWF0U2hlZXRzLnBkZikNCg0KLSAqUmVjaXBlcyo6IFtPcGVuIFJlZmluZSBmb3IgTGlicmFyaWFuc10oaHR0cDovL2xpd29uZy5ibG9nc3BvdC5jb20vc2VhcmNoL2xhYmVsL3JlY2lwZSkNCg0KLSBbR1JFTCBSZWNpcGVzXShodHRwczovL2dpdGh1Yi5jb20vT3BlblJlZmluZS9PcGVuUmVmaW5lL3dpa2kvUmVjaXBlcykNCg0KLSBbRXRjIV0oaHR0cHM6Ly9naXRodWIuY29tL09wZW5SZWZpbmUvT3BlblJlZmluZS93aWtpL0V4dGVybmFsLVJlc291cmNlcykNCg0KDQo8c3R5bGU+DQoucmlnaHQgew0KIGZsb2F0OiByaWdodDsNCn0NCg0KLmNlbnRlciB7DQogYWxpZ246IGNlbnRlcjsNCn0NCg0KLm5vdGUgew0KICBwYWRkaW5nOiAwLjVlbTsNCiAgYm9yZGVyLXN0eWxlOiBzb2xpZDsNCiAgYm9yZGVyLWNvbG9yOiBncmVlbjsNCiAgYm9yZGVyLXdpZHRoOiB0aGluOw0KICBmb250LXNpemU6IDkwJTsNCiAgYm9yZGVyLXJhZGl1czogMTBweDsNCn0NCg0KLmJveDEgew0KICBwYWRkaW5nOiAwLjVlbTsNCiAgYmFja2dyb3VuZDogI2UwZWJlYjsNCiAgY29sb3I6IGJsYWNrOw0KICBib3JkZXItcmFkaXVzOiAxMHB4Ow0KfQ0KDQouYm94MiB7DQogIHBhZGRpbmc6IDAuNWVtOw0KICBiYWNrZ3JvdW5kOiAjOTJiOWI5Ow0KICBjb2xvcjogd2hpdGU7DQogIGJvcmRlci1yYWRpdXM6IDEwcHg7DQp9DQouY2VudGVyIHsNCiAgdGV4dC1hbGlnbjogY2VudGVyOw0KfQ0KDQoudGl0bGUgew0KICB0ZXh0LWFsaWduOiBjZW50ZXI7DQogIGNvbG9yOiAjMDAzMzY2Ow0KfQ0KDQouc3VidGl0bGUgew0KICBjb2xvcjogIzAwMzM2NjsNCn0NCg0KaDEsIGgyLCBoMywgaDQsIGg1LCBoNiwgbGVnZW5kIHsNCiAgY29sb3I6ICM1QTdCOUM7DQp9DQoNCjwvc3R5bGU+